{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "demo_learning_static_analyses.ipynb",
      "provenance": [],
      "collapsed_sections": [
        "JndnmDMp66FL"
      ]
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "TPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "JndnmDMp66FL"
      },
      "source": [
        "##### Copyright 2020 Google LLC.\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "hMqWDc_m6rUC"
      },
      "source": [
        "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "YpCT3cA2P2ON"
      },
      "source": [
        "# Interactive demo: Learning static analyses with the GFSA layer\n",
        "\n",
        "This notebook is designed to walk you through training the GFSA layer to perform simple static analyses on Python code, similar to the static analysis experiments in the paper.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UNnd2YesSAFr"
      },
      "source": [
        "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google-research/google-research/blob/master/gfsa/notebooks/demo_learning_static_analyses.ipynb)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Tr2Z0N-qSNz6"
      },
      "source": [
        "## Setting up the environment"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "obGYeV4EUb61"
      },
      "source": [
        "These instructions are designed for running this demo using Google Colab; if you are using a different environment, the setup instructions may differ!\n",
        "\n",
        "If you want to follow along, the first step is to connect the Colab runtime to a TPU. You can use the \"Runtime > Change runtime type\" option in the toolbar above.\n",
        "\n",
        "Next, install necessary dependencies:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_j6tXnzFn-s6",
        "outputId": "e8f42689-adca-4e5b-8ec4-5798022c5920"
      },
      "source": [
        "# Download the GFSA codebase\n",
        "!git clone https://github.com/google-research/google-research.git --depth=1"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Cloning into 'google-research'...\n",
            "remote: Enumerating objects: 10043, done.\u001b[K\n",
            "remote: Counting objects: 100% (10043/10043), done.\u001b[K\n",
            "remote: Compressing objects: 100% (8038/8038), done.\u001b[K\n",
            "remote: Total 10043 (delta 1443), reused 7963 (delta 1209), pack-reused 0\u001b[K\n",
            "Receiving objects: 100% (10043/10043), 109.57 MiB | 21.79 MiB/s, done.\n",
            "Resolving deltas: 100% (1443/1443), done.\n",
            "Checking out files: 100% (10525/10525), done.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NsacX7KEsp0D"
      },
      "source": [
        "import os\n",
        "os.chdir(\"google-research\")"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "AFH12ED4-5fU",
        "outputId": "8d9c3e56-2f9c-4181-c03b-6db20a1ca33c"
      },
      "source": [
        "# Install Python packages\n",
        "!pip install flax labmaze optax tensor2tensor"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting flax\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/2e/ef/1a0c6a869396e4b20a83375fe06d725b5c1711746578ee8dd6969472af41/flax-0.2.2-py3-none-any.whl (148kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 153kB 5.1MB/s \n",
            "\u001b[?25hCollecting labmaze\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/0f/69/9f3b4790affd5353d22608003a555fd9325cc19fe5a3141b563297b4986f/labmaze-1.0.3-cp36-cp36m-manylinux1_x86_64.whl (4.9MB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 4.9MB 18.0MB/s \n",
            "\u001b[?25hCollecting optax\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1d/94/0a81a6c0aeb1f22840f097dc023cdd803e36d86a0ac8724ad829a51f92a4/optax-0.0.2-py3-none-any.whl (54kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 61kB 7.4MB/s \n",
            "\u001b[?25hCollecting tensor2tensor\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/d6/7c/9e87d30cefad5cbc390bb7f626efb3ded9b19416b8160f1a1278da81b218/tensor2tensor-1.15.7-py2.py3-none-any.whl (1.4MB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 1.5MB 39.6MB/s \n",
            "\u001b[?25hRequirement already satisfied: jax>=0.1.59 in /usr/local/lib/python3.6/dist-packages (from flax) (0.2.6)\n",
            "Requirement already satisfied: numpy>=1.12 in /usr/local/lib/python3.6/dist-packages (from flax) (1.18.5)\n",
            "Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from flax) (3.2.2)\n",
            "Requirement already satisfied: dataclasses; python_version < \"3.7\" in /usr/local/lib/python3.6/dist-packages (from flax) (0.8)\n",
            "Requirement already satisfied: msgpack in /usr/local/lib/python3.6/dist-packages (from flax) (1.0.0)\n",
            "Requirement already satisfied: absl-py in /usr/local/lib/python3.6/dist-packages (from labmaze) (0.10.0)\n",
            "Requirement already satisfied: six>=1.4.1 in /usr/local/lib/python3.6/dist-packages (from labmaze) (1.15.0)\n",
            "Collecting chex>=0.0.3\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/24/ef/9522eee302d4e3d6504d53d38e7180ca97404c19e638caeacb91cea9b20b/chex-0.0.3-py3-none-any.whl (48kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 51kB 5.6MB/s \n",
            "\u001b[?25hRequirement already satisfied: jaxlib>=0.1.37 in /usr/local/lib/python3.6/dist-packages (from optax) (0.1.57+cuda101)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (2.23.0)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (4.41.1)\n",
            "Collecting tf-slim\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/02/97/b0f4a64df018ca018cc035d44f2ef08f91e2e8aa67271f6f19633a015ff7/tf_slim-1.1.0-py2.py3-none-any.whl (352kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 358kB 47.8MB/s \n",
            "\u001b[?25hRequirement already satisfied: gin-config in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (0.3.0)\n",
            "Collecting bz2file\n",
            "  Downloading https://files.pythonhosted.org/packages/61/39/122222b5e85cd41c391b68a99ee296584b2a2d1d233e7ee32b4532384f2d/bz2file-0.98.tar.gz\n",
            "Requirement already satisfied: tensorflow-addons in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (0.8.3)\n",
            "Requirement already satisfied: google-api-python-client in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (1.7.12)\n",
            "Collecting tensorflow-probability==0.7.0\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/3e/3a/c10b6c22320531c774402ac7186d1b673374e2a9d12502cbc8d811e4601c/tensorflow_probability-0.7.0-py2.py3-none-any.whl (981kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 983kB 32.2MB/s \n",
            "\u001b[?25hRequirement already satisfied: opencv-python in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (4.1.2.30)\n",
            "Requirement already satisfied: tensorflow-datasets in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (4.0.1)\n",
            "Requirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (0.16.0)\n",
            "Collecting mesh-tensorflow\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/16/8b/553deb763ce8d00afb17debab7cb14a87b209cd4c6f0e8ecfc8d884cb12a/mesh_tensorflow-0.1.17-py3-none-any.whl (342kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 348kB 37.9MB/s \n",
            "\u001b[?25hRequirement already satisfied: oauth2client in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (4.1.3)\n",
            "Requirement already satisfied: flask in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (1.1.2)\n",
            "Requirement already satisfied: sympy in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (1.1.1)\n",
            "Collecting pypng\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/bc/fb/f719f1ac965e2101aa6ea6f54ef8b40f8fbb033f6ad07c017663467f5147/pypng-0.0.20.tar.gz (649kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 655kB 45.3MB/s \n",
            "\u001b[?25hRequirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (1.4.1)\n",
            "Requirement already satisfied: Pillow in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (7.0.0)\n",
            "Collecting gunicorn\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/69/ca/926f7cd3a2014b16870086b2d0fdc84a9e49473c68a8dff8b57f7c156f43/gunicorn-20.0.4-py2.py3-none-any.whl (77kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 81kB 8.7MB/s \n",
            "\u001b[?25hRequirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (2.10.0)\n",
            "Collecting kfac\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1c/36/06fe2c757044bb51906fef231ac48cc5bf9a277fc9a8c7e1108d7e9e8cfd/kfac-0.2.3-py2.py3-none-any.whl (191kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 194kB 41.5MB/s \n",
            "\u001b[?25hRequirement already satisfied: gym in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (0.17.3)\n",
            "Requirement already satisfied: dopamine-rl in /usr/local/lib/python3.6/dist-packages (from tensor2tensor) (1.0.5)\n",
            "Collecting tensorflow-gan\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/0c/2e/62922111d7d50e1900e3030764743ea7735540ce103b3ab30fd5cd2d8a2b/tensorflow_gan-2.0.0-py2.py3-none-any.whl (365kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 368kB 32.8MB/s \n",
            "\u001b[?25hCollecting gevent\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/3f/92/b80b922f08f222faca53c8d278e2e612192bc74b0e1f0db2f80a6ee46982/gevent-20.9.0-cp36-cp36m-manylinux2010_x86_64.whl (5.3MB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 5.3MB 46.7MB/s \n",
            "\u001b[?25hRequirement already satisfied: opt-einsum in /usr/local/lib/python3.6/dist-packages (from jax>=0.1.59->flax) (3.3.0)\n",
            "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->flax) (2.8.1)\n",
            "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->flax) (2.4.7)\n",
            "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->flax) (1.3.1)\n",
            "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib->flax) (0.10.0)\n",
            "Requirement already satisfied: dm-tree>=0.1.5 in /usr/local/lib/python3.6/dist-packages (from chex>=0.0.3->optax) (0.1.5)\n",
            "Requirement already satisfied: toolz>=0.9.0 in /usr/local/lib/python3.6/dist-packages (from chex>=0.0.3->optax) (0.11.1)\n",
            "Requirement already satisfied: flatbuffers in /usr/local/lib/python3.6/dist-packages (from jaxlib>=0.1.37->optax) (1.12)\n",
            "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->tensor2tensor) (2.10)\n",
            "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->tensor2tensor) (1.24.3)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->tensor2tensor) (2020.11.8)\n",
            "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->tensor2tensor) (3.0.4)\n",
            "Requirement already satisfied: typeguard in /usr/local/lib/python3.6/dist-packages (from tensorflow-addons->tensor2tensor) (2.7.1)\n",
            "Requirement already satisfied: httplib2<1dev,>=0.17.0 in /usr/local/lib/python3.6/dist-packages (from google-api-python-client->tensor2tensor) (0.17.4)\n",
            "Requirement already satisfied: google-auth-httplib2>=0.0.3 in /usr/local/lib/python3.6/dist-packages (from google-api-python-client->tensor2tensor) (0.0.4)\n",
            "Requirement already satisfied: google-auth>=1.4.1 in /usr/local/lib/python3.6/dist-packages (from google-api-python-client->tensor2tensor) (1.17.2)\n",
            "Requirement already satisfied: uritemplate<4dev,>=3.0.0 in /usr/local/lib/python3.6/dist-packages (from google-api-python-client->tensor2tensor) (3.0.1)\n",
            "Requirement already satisfied: decorator in /usr/local/lib/python3.6/dist-packages (from tensorflow-probability==0.7.0->tensor2tensor) (4.4.2)\n",
            "Requirement already satisfied: cloudpickle>=0.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow-probability==0.7.0->tensor2tensor) (1.3.0)\n",
            "Requirement already satisfied: attrs>=18.1.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-datasets->tensor2tensor) (20.3.0)\n",
            "Requirement already satisfied: tensorflow-metadata in /usr/local/lib/python3.6/dist-packages (from tensorflow-datasets->tensor2tensor) (0.25.0)\n",
            "Requirement already satisfied: termcolor in /usr/local/lib/python3.6/dist-packages (from tensorflow-datasets->tensor2tensor) (1.1.0)\n",
            "Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow-datasets->tensor2tensor) (3.12.4)\n",
            "Requirement already satisfied: promise in /usr/local/lib/python3.6/dist-packages (from tensorflow-datasets->tensor2tensor) (2.3)\n",
            "Requirement already satisfied: dill in /usr/local/lib/python3.6/dist-packages (from tensorflow-datasets->tensor2tensor) (0.3.3)\n",
            "Requirement already satisfied: importlib-resources; python_version < \"3.9\" in /usr/local/lib/python3.6/dist-packages (from tensorflow-datasets->tensor2tensor) (3.3.0)\n",
            "Requirement already satisfied: pyasn1>=0.1.7 in /usr/local/lib/python3.6/dist-packages (from oauth2client->tensor2tensor) (0.4.8)\n",
            "Requirement already satisfied: rsa>=3.1.4 in /usr/local/lib/python3.6/dist-packages (from oauth2client->tensor2tensor) (4.6)\n",
            "Requirement already satisfied: pyasn1-modules>=0.0.5 in /usr/local/lib/python3.6/dist-packages (from oauth2client->tensor2tensor) (0.2.8)\n",
            "Requirement already satisfied: Jinja2>=2.10.1 in /usr/local/lib/python3.6/dist-packages (from flask->tensor2tensor) (2.11.2)\n",
            "Requirement already satisfied: click>=5.1 in /usr/local/lib/python3.6/dist-packages (from flask->tensor2tensor) (7.1.2)\n",
            "Requirement already satisfied: Werkzeug>=0.15 in /usr/local/lib/python3.6/dist-packages (from flask->tensor2tensor) (1.0.1)\n",
            "Requirement already satisfied: itsdangerous>=0.24 in /usr/local/lib/python3.6/dist-packages (from flask->tensor2tensor) (1.1.0)\n",
            "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.6/dist-packages (from sympy->tensor2tensor) (1.1.0)\n",
            "Requirement already satisfied: setuptools>=3.0 in /usr/local/lib/python3.6/dist-packages (from gunicorn->tensor2tensor) (50.3.2)\n",
            "Requirement already satisfied: pyglet<=1.5.0,>=1.4.0 in /usr/local/lib/python3.6/dist-packages (from gym->tensor2tensor) (1.5.0)\n",
            "Requirement already satisfied: tensorflow-hub>=0.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gan->tensor2tensor) (0.10.0)\n",
            "Collecting greenlet>=0.4.17; platform_python_implementation == \"CPython\"\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/80/d0/532e160c777b42f6f393f9de8c88abb8af6c892037c55e4d3a8a211324dd/greenlet-0.4.17-cp36-cp36m-manylinux1_x86_64.whl (44kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 51kB 7.0MB/s \n",
            "\u001b[?25hCollecting zope.interface\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/82/b0/da8afd9b3bd50c7665ecdac062f182982af1173c9081f9af7261091c5588/zope.interface-5.2.0-cp36-cp36m-manylinux2010_x86_64.whl (236kB)\n",
            "\u001b[K     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 245kB 43.8MB/s \n",
            "\u001b[?25hCollecting zope.event\n",
            "  Downloading https://files.pythonhosted.org/packages/9e/85/b45408c64f3b888976f1d5b37eed8d746b8d5729a66a49ec846fda27d371/zope.event-4.5.0-py2.py3-none-any.whl\n",
            "Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from google-auth>=1.4.1->google-api-python-client->tensor2tensor) (4.1.1)\n",
            "Requirement already satisfied: googleapis-common-protos<2,>=1.52.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-metadata->tensorflow-datasets->tensor2tensor) (1.52.0)\n",
            "Requirement already satisfied: zipp>=0.4; python_version < \"3.8\" in /usr/local/lib/python3.6/dist-packages (from importlib-resources; python_version < \"3.9\"->tensorflow-datasets->tensor2tensor) (3.4.0)\n",
            "Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.6/dist-packages (from Jinja2>=2.10.1->flask->tensor2tensor) (1.1.1)\n",
            "Building wheels for collected packages: bz2file, pypng\n",
            "  Building wheel for bz2file (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for bz2file: filename=bz2file-0.98-cp36-none-any.whl size=6884 sha256=45ffa796f114e5edbf92475ab42982efa3b9b026801025bd0f9217ef533918e8\n",
            "  Stored in directory: /root/.cache/pip/wheels/81/75/d6/e1317bf09bf1af5a30befc2a007869fa6e1f516b8f7c591cb9\n",
            "  Building wheel for pypng (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for pypng: filename=pypng-0.0.20-cp36-none-any.whl size=67162 sha256=8cbc8c8dec3b8620bdbba3a9d660d482ae0c233ef3892a9f18b1e40d4f231711\n",
            "  Stored in directory: /root/.cache/pip/wheels/41/6b/ef/0493b536b6d4722c2ae9486691b1d49b922b9877922beeabb3\n",
            "Successfully built bz2file pypng\n",
            "\u001b[31mERROR: kfac 0.2.3 has requirement tensorflow-probability==0.8, but you'll have tensorflow-probability 0.7.0 which is incompatible.\u001b[0m\n",
            "Installing collected packages: flax, labmaze, chex, optax, tf-slim, bz2file, tensorflow-probability, mesh-tensorflow, pypng, gunicorn, kfac, tensorflow-gan, greenlet, zope.interface, zope.event, gevent, tensor2tensor\n",
            "  Found existing installation: tensorflow-probability 0.11.0\n",
            "    Uninstalling tensorflow-probability-0.11.0:\n",
            "      Successfully uninstalled tensorflow-probability-0.11.0\n",
            "Successfully installed bz2file-0.98 chex-0.0.3 flax-0.2.2 gevent-20.9.0 greenlet-0.4.17 gunicorn-20.0.4 kfac-0.2.3 labmaze-1.0.3 mesh-tensorflow-0.1.17 optax-0.0.2 pypng-0.0.20 tensor2tensor-1.15.7 tensorflow-gan-2.0.0 tensorflow-probability-0.7.0 tf-slim-1.1.0 zope.event-4.5.0 zope.interface-5.2.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1Tg58CmXVn7n"
      },
      "source": [
        "Make sure JAX can see the TPU:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "FArRxsRXT1LK",
        "outputId": "4c1cd77b-ef31-424b-b72c-b46d07e5cc39"
      },
      "source": [
        "# See https://github.com/google/jax/blob/master/cloud_tpu_colabs/JAX_demo.ipynb\n",
        "import requests\n",
        "import os\n",
        "\n",
        "if 'COLAB_TPU_ADDR' not in os.environ:\n",
        "  raise RuntimeError(\"Please connect to a TPU runtime first!\")\n",
        "\n",
        "if 'TPU_DRIVER_MODE' not in globals():\n",
        "  url = 'http://' + os.environ['COLAB_TPU_ADDR'].split(':')[0] + ':8475/requestversion/tpu_driver_nightly'\n",
        "  resp = requests.post(url)\n",
        "  TPU_DRIVER_MODE = 1\n",
        "\n",
        "# Use TPU Driver as JAX's backend.\n",
        "from jax import config\n",
        "config.FLAGS.jax_xla_backend = \"tpu_driver\"\n",
        "config.FLAGS.jax_backend_target = \"grpc://\" + os.environ['COLAB_TPU_ADDR']\n",
        "print(config.FLAGS.jax_backend_target)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "grpc://10.48.40.138:8470\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yBXGGg-9VxYT",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "d4afab41-c31e-405f-bb74-d715bd01bf88"
      },
      "source": [
        "import jax\n",
        "jax.devices()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[TpuDevice(id=0, host_id=0, coords=(0,0,0), core_on_chip=0),\n",
              " TpuDevice(id=1, host_id=0, coords=(0,0,0), core_on_chip=1),\n",
              " TpuDevice(id=2, host_id=0, coords=(1,0,0), core_on_chip=0),\n",
              " TpuDevice(id=3, host_id=0, coords=(1,0,0), core_on_chip=1),\n",
              " TpuDevice(id=4, host_id=0, coords=(0,1,0), core_on_chip=0),\n",
              " TpuDevice(id=5, host_id=0, coords=(0,1,0), core_on_chip=1),\n",
              " TpuDevice(id=6, host_id=0, coords=(1,1,0), core_on_chip=0),\n",
              " TpuDevice(id=7, host_id=0, coords=(1,1,0), core_on_chip=1)]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vW6Hw6pZrbFU"
      },
      "source": [
        "You should see 8 TPU devices connected above!"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "QWHbsCIrmclj"
      },
      "source": [
        "## Imports and configuration"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "s05zBrEFrg0x"
      },
      "source": [
        "Let's import and set up some things we will need later:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "za59VfQMUalu"
      },
      "source": [
        "import functools\n",
        "import itertools\n",
        "import sys\n",
        "import datetime\n",
        "\n",
        "from absl import logging\n",
        "from absl import flags\n",
        "\n",
        "import astunparse\n",
        "import dataclasses\n",
        "import flax\n",
        "import gast\n",
        "import matplotlib.pyplot as plt\n",
        "import matplotlib as mpl\n",
        "import numpy as np\n",
        "import jax.numpy as jnp"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vk6QW3EdlkD5"
      },
      "source": [
        "np.set_printoptions(linewidth=150)\n",
        "logging.use_python_logging()\n",
        "logging.set_verbosity(\"info\")\n",
        "logging.set_stderrthreshold(\"info\")"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Njx8L6qPr8xS"
      },
      "source": [
        "from gfsa import automaton_builder\n",
        "from gfsa import generic_ast_graphs\n",
        "from gfsa import graph_types\n",
        "from gfsa import jax_util\n",
        "from gfsa import py_ast_graphs\n",
        "from gfsa import schema_util\n",
        "\n",
        "from gfsa.datasets import data_loading\n",
        "from gfsa.datasets import graph_bundle\n",
        "from gfsa.datasets import graph_edge_util\n",
        "from gfsa.datasets.random_python import tasks\n",
        "from gfsa.datasets.random_python import python_numbers_control_flow\n",
        "\n",
        "from gfsa.model import automaton_layer\n",
        "from gfsa.model import edge_supervision_models\n",
        "from gfsa.model import model_util\n",
        "\n",
        "from gfsa.training import train_edge_supervision_lib\n",
        "from gfsa.training import train_util\n",
        "from gfsa.training import simple_runner\n",
        "from gfsa.training import learning_rate_schedules\n",
        "\n",
        "from gfsa import visualization\n",
        "import gfsa.visualization.ndarrays\n",
        "from gfsa.visualization.pprint import pprint\n",
        "from gfsa.visualization.pytrees import summarize_tree"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qxShw-nZnmYc"
      },
      "source": [
        "## Generating random Python functions"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qqefozNSorb7"
      },
      "source": [
        "In this notebook, we will be focusing on graph representations of random Python programs, similar to those used in the static analysis experiments in the paper. We can start by generating some random Python programs!\n",
        "\n",
        "The GFSA codebase includes functions for generating random Python functions of configurable size. Python functions are represented as `gast.AST` objects, which can be converted back to source code using `astunparse.unparse`:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IwTH9qGLg9xE",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "ca70a4d8-dfc8-4f84-ba0e-66c088d6f63b"
      },
      "source": [
        "the_ast = tasks.make_ast(25, np.random.RandomState(6))\n",
        "print(astunparse.unparse(gast.gast_to_ast(the_ast)))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "\n",
            "\n",
            "def random_function(a, b):\n",
            "    a = b\n",
            "    if (True and (a > foo_2(b, b))):\n",
            "        b = b\n",
            "    else:\n",
            "        v2 = a\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "w2LSSvWznloX",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "bd65b09e-50d0-4f24-b95a-a54e37a7c50d"
      },
      "source": [
        "pprint(the_ast)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Module(\n",
            "    body=[FunctionDef(\n",
            "              name='random_function',\n",
            "              args=arguments(\n",
            "                       args=[Name(id='a', ctx=Param(), annotation=None, type_comment=None),\n",
            "                             Name(id='b', ctx=Param(), annotation=None, type_comment=None)],\n",
            "                       posonlyargs=[],\n",
            "                       vararg=None,\n",
            "                       kwonlyargs=[],\n",
            "                       kw_defaults=[],\n",
            "                       kwarg=None,\n",
            "                       defaults=[]),\n",
            "              body=[Assign(\n",
            "                        targets=[Name(id='a', ctx=Store(), annotation=None, type_comment=None)],\n",
            "                        value=Name(id='b', ctx=Load(), annotation=None, type_comment=None)),\n",
            "                    If(\n",
            "                        test=BoolOp(\n",
            "                                 op=And(),\n",
            "                                 values=[Constant(value=True, kind=None),\n",
            "                                         Compare(\n",
            "                                             left=Name(id='a', ctx=Load(), annotation=None, type_comment=None),\n",
            "                                             ops=[Gt()],\n",
            "                                             comparators=[Call(\n",
            "                                                              func=Name(\n",
            "                                                                       id='foo_2',\n",
            "                                                                       ctx=Load(),\n",
            "                                                                       annotation=None,\n",
            "                                                                       type_comment=None),\n",
            "                                                              args=[Name(\n",
            "                                                                        id='b',\n",
            "                                                                        ctx=Load(),\n",
            "                                                                        annotation=None,\n",
            "                                                                        type_comment=None),\n",
            "                                                                    Name(\n",
            "                                                                        id='b',\n",
            "                                                                        ctx=Load(),\n",
            "                                                                        annotation=None,\n",
            "                                                                        type_comment=None)],\n",
            "                                                              keywords=[])])]),\n",
            "                        body=[Assign(\n",
            "                                  targets=[Name(id='b', ctx=Store(), annotation=None, type_comment=None)],\n",
            "                                  value=Name(id='b', ctx=Load(), annotation=None, type_comment=None))],\n",
            "                        orelse=[Assign(\n",
            "                                    targets=[Name(id='v2', ctx=Store(), annotation=None, type_comment=None)],\n",
            "                                    value=Name(id='a', ctx=Load(), annotation=None, type_comment=None))])],\n",
            "              decorator_list=[],\n",
            "              returns=None,\n",
            "              type_comment=None)],\n",
            "    type_ignores=[])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GgTuFuiOh8hB"
      },
      "source": [
        "The first argument to `make_ast` is the number of AST nodes to generate, and the second is the (optional) random seed to use. For instance, here's a larger function:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5kNtvaMNiMHX",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "e6b91c54-b5c4-4b2a-d0c6-65527bf15bbb"
      },
      "source": [
        "the_ast_larger = tasks.make_ast(150, np.random.RandomState(1234))\n",
        "print(astunparse.unparse(gast.gast_to_ast(the_ast_larger)))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "\n",
            "\n",
            "def random_function(a, b):\n",
            "    if True:\n",
            "        a = a\n",
            "        if (b < foo_1(bar_4(b, a, foo_4(b, b, b, a), a))):\n",
            "            b = bar_4(foo_2(10, a), (b - b), b, bar_2(b, a))\n",
            "            v2 = 14\n",
            "        b = bar_4(b, ((b / 50) * (a / b)), a, ((a * 46) / bar_1(b)))\n",
            "        a = b\n",
            "    v2 = bar_4((b / foo_1(b)), a, (a + a), a)\n",
            "    b = foo_2(bar_2(bar_2(94, v2), a), foo_2(bar_1(v2), foo_2(v2, a)))\n",
            "    for v3 in range(int(b)):\n",
            "        v4 = (b / a)\n",
            "        while True:\n",
            "            v2 = foo_2(v2, b)\n",
            "    a = b\n",
            "    b = (b * 93)\n",
            "    v3 = v2\n",
            "    print(bar_1(10))\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "PWygFqPnogoi"
      },
      "source": [
        "## Interpreting Python functions as MDPs\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kPcGfSEit-IG"
      },
      "source": [
        "In order to run a GFSA layer on our functions, we need to convert them into graphs, and then impose an MDP structure on those graphs.\n",
        "\n",
        "This process is performed over two steps:\n",
        "\n",
        "- First, convert the Python AST into a generic representation of abstract syntax trees.\n",
        "- Next, use an \"AST specification\" to transform the generic AST into an MDP. This describes what fields each AST node has, and how many of each there are. This information is used to determine what the states, actions, and transitions in the MDP should be. For instance, since a return node may or may not have a value, the MDP has an action for going to the value of a return node, and an observation that indicates that the value was missing. Similarly, since a function call may have many arguments, the MDP has states that track which argument the agent is visiting, actions that move to previous or next arguments, and an observation for reaching the end of the list.\n",
        "\n",
        "<br><br>\n",
        "\n",
        "--- \n",
        "\n",
        "\ud83d\udcac&nbsp; *Note:* If you want to apply the GFSA layer to a different type of AST, you need to:\n",
        "\n",
        "- write a function to convert from that AST to the generic AST representation shown below\n",
        "- define an AST specification for it (either by hand, or by using `ast_spec_inference.py`)\n",
        "\n",
        "If you want to apply the GFSA layer to a graph that isn't an AST, you need to describe the MDP in more detail. See the notebook [\"Using the GFSA layer with new tasks\"][new-tasks-colab], which describes how to do this!\n",
        "\n",
        "[new-tasks-colab]: https://colab.research.google.com/github/google-research/google-research/blob/master/gfsa/notebooks/guide_for_new_tasks.ipynb\n",
        "\n",
        "---"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "A8mcjpRaYyC9"
      },
      "source": [
        "After the first step, we have the same tree structure as before, but instead of various instances of `gast.AST` classes, we now have `GenericASTNode` objects tagged with numeric IDs and string types (which makes it easier to manipulate in a uniform way):"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7LcG1Ha8oiw7",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "d8c65917-75b0-4fc3-997c-85acf8eee66d"
      },
      "source": [
        "generic_ast = py_ast_graphs.py_ast_to_generic(the_ast)\n",
        "pprint(generic_ast)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "GenericASTNode(\n",
            "    node_id=140157879314192,\n",
            "    node_type='Module',\n",
            "    fields={'body': [GenericASTNode(\n",
            "                         node_id=140157879313632,\n",
            "                         node_type='FunctionDef',\n",
            "                         fields={'args': [GenericASTNode(\n",
            "                                              node_id=140157879316432,\n",
            "                                              node_type='arguments',\n",
            "                                              fields={'args': [GenericASTNode(\n",
            "                                                                   node_id=140157879315816,\n",
            "                                                                   node_type='Name',\n",
            "                                                                   fields={'ctx': [GenericASTNode(\n",
            "                                                                                       node_id=140157879316152,\n",
            "                                                                                       node_type='Param',\n",
            "                                                                                       fields={})]}),\n",
            "                                                               GenericASTNode(\n",
            "                                                                   node_id=140157879314360,\n",
            "                                                                   node_type='Name',\n",
            "                                                                   fields={'ctx': [GenericASTNode(\n",
            "                                                                                       node_id=140157879315928,\n",
            "                                                                                       node_type='Param',\n",
            "                                                                                       fields={})]})]})],\n",
            "                                 'body': [GenericASTNode(\n",
            "                                              node_id=140157879314472,\n",
            "                                              node_type='Assign',\n",
            "                                              fields={'targets': [GenericASTNode(\n",
            "                                                                      node_id=140157879315648,\n",
            "                                                                      node_type='Name',\n",
            "                                                                      fields={'ctx': [GenericASTNode(\n",
            "                                                                                          node_id=140157879314640,\n",
            "                                                                                          node_type='Store',\n",
            "                                                                                          fields={})]})],\n",
            "                                                      'value': [GenericASTNode(\n",
            "                                                                    node_id=140157879315592,\n",
            "                                                                    node_type='Name',\n",
            "                                                                    fields={'ctx': [GenericASTNode(\n",
            "                                                                                        node_id=140157879315704,\n",
            "                                                                                        node_type='Load',\n",
            "                                                                                        fields={})]})]}),\n",
            "                                          GenericASTNode(\n",
            "                                              node_id=140157879316040,\n",
            "                                              node_type='If',\n",
            "                                              fields={'test': [GenericASTNode(\n",
            "                                                                   node_id=140157879315480,\n",
            "                                                                   node_type='BoolOp',\n",
            "                                                                   fields={'op': [GenericASTNode(\n",
            "                                                                                      node_id=140157879315424,\n",
            "                                                                                      node_type='And',\n",
            "                                                                                      fields={})],\n",
            "                                                                           'values': [GenericASTNode(\n",
            "                                                                                          node_id=140157879315312,\n",
            "                                                                                          node_type='Constant',\n",
            "                                                                                          fields={}),\n",
            "                                                                                      GenericASTNode(\n",
            "                                                                                          node_id=140157879315256,\n",
            "                                                                                          node_type='Compare',\n",
            "                                                                                          fields={'left': [GenericASTNode(\n",
            "                                                                                                               node_id=140157879314920,\n",
            "                                                                                                               node_type='Name',\n",
            "                                                                                                               fields={'ctx': [GenericASTNode(\n",
            "                                                                                                                                   node_id=140157879315032,\n",
            "                                                                                                                                   node_type='Load',\n",
            "                                                                                                                                   fields={})]})],\n",
            "                                                                                                  'ops': [GenericASTNode(\n",
            "                                                                                                              node_id=140157879314808,\n",
            "                                                                                                              node_type='Gt',\n",
            "                                                                                                              fields={})],\n",
            "                                                                                                  'comparators': [GenericASTNode(\n",
            "                                                                                                                      node_id=140157879314752,\n",
            "                                                                                                                      node_type='Call',\n",
            "                                                                                                                      fields={'func': [GenericASTNode(\n",
            "                                                                                                                                           node_id=140157879314528,\n",
            "                                                                                                                                           node_type='Name',\n",
            "                                                                                                                                           fields={'ctx': [GenericASTNode(\n",
            "                                                                                                                                                               node_id=140157879314696,\n",
            "                                                                                                                                                               node_type='Load',\n",
            "                                                                                                                                                               fields={})]})],\n",
            "                                                                                                                              'args': [GenericASTNode(\n",
            "                                                                                                                                           node_id=140157879316096,\n",
            "                                                                                                                                           node_type='Name',\n",
            "                                                                                                                                           fields={'ctx': [GenericASTNode(\n",
            "                                                                                                                                                               node_id=140157879314976,\n",
            "                                                                                                                                                               node_type='Load',\n",
            "                                                                                                                                                               fields={})]}),\n",
            "                                                                                                                                       GenericASTNode(\n",
            "                                                                                                                                           node_id=140157879357960,\n",
            "                                                                                                                                           node_type='Name',\n",
            "                                                                                                                                           fields={'ctx': [GenericASTNode(\n",
            "                                                                                                                                                               node_id=140157879357904,\n",
            "                                                                                                                                                               node_type='Load',\n",
            "                                                                                                                                                               fields={})]})]})]})]})],\n",
            "                                                      'body': [GenericASTNode(\n",
            "                                                                   node_id=140157879315144,\n",
            "                                                                   node_type='Assign',\n",
            "                                                                   fields={'targets': [GenericASTNode(\n",
            "                                                                                           node_id=140157879357792,\n",
            "                                                                                           node_type='Name',\n",
            "                                                                                           fields={'ctx': [GenericASTNode(\n",
            "                                                                                                               node_id=140157879357848,\n",
            "                                                                                                               node_type='Store',\n",
            "                                                                                                               fields={})]})],\n",
            "                                                                           'value': [GenericASTNode(\n",
            "                                                                                         node_id=140157879357736,\n",
            "                                                                                         node_type='Name',\n",
            "                                                                                         fields={'ctx': [GenericASTNode(\n",
            "                                                                                                             node_id=140157879314864,\n",
            "                                                                                                             node_type='Load',\n",
            "                                                                                                             fields={})]})]})],\n",
            "                                                      'orelse': [GenericASTNode(\n",
            "                                                                     node_id=140157879315200,\n",
            "                                                                     node_type='Assign',\n",
            "                                                                     fields={'targets': [GenericASTNode(\n",
            "                                                                                             node_id=140157879357512,\n",
            "                                                                                             node_type='Name',\n",
            "                                                                                             fields={'ctx': [GenericASTNode(\n",
            "                                                                                                                 node_id=140157879357568,\n",
            "                                                                                                                 node_type='Store',\n",
            "                                                                                                                 fields={})]})],\n",
            "                                                                             'value': [GenericASTNode(\n",
            "                                                                                           node_id=140157879358128,\n",
            "                                                                                           node_type='Name',\n",
            "                                                                                           fields={'ctx': [GenericASTNode(\n",
            "                                                                                                               node_id=140157879357624,\n",
            "                                                                                                               node_type='Load',\n",
            "                                                                                                               fields={})]})]})]})]})]})\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1tDh58MlZA5o"
      },
      "source": [
        "The second step produces a \"flat\" representation of the tree as a graph-based MDP. Each item in the returned dictionary has an autogenerated key (based on the path through the AST from the root node to each AST node), and a `GraphNode` value that specifies the type of the node and the set of possible MDP transitions.\n",
        "\n",
        "<br>\n",
        "\n",
        "---\n",
        "\n",
        "*Note on terminology:* In the GFSA codebase, we represent MDPs as a special type of directed graph, and use some terms interchangeably. In particular:\n",
        "\n",
        "- Every node in the graph corresponds to a possible location of the agent in the environment.\n",
        "- An *out-edge* connects each graph node to the other graph nodes that the agent could move TO when at this location. This determines the action space for the agent; the agent chooses an out-edge type, and then moves to (one of) the destination nodes for that out-edge type.\n",
        "- An *in-edge* connects each graph node to the other graph nodes that the agent could move FROM when arriving at this location. This determines the observation space for the agent; when arriving at a node, it will observe the in-edge type that was used to enter the node.\n",
        "- Each edge in the graph is associated with both an out-edge type and an in-edge type, which specifies how the agent chooses to cross this edge and the observation it receives when it does so. These will often be different. As an example, for a graph representing an AST where B is the left child of A,\n",
        "the edge from A to B might have outgoing type \"left child\" and incoming type\n",
        "\"parent\"; then an agent can choose to move to the left child, and upon doing so observes that it has arrived at that node from its parent.\n",
        "- An *input-tagged node* is a pair of (node id, in-edge type). This specifies both the location of an agent and the observation that agent receives at that location. When solving for the absorbing distribution, the set of input-tagged nodes determines the size of the transition matrix.\n",
        "\n",
        "See `graph_types.py` for more information about the notation used.\n",
        "\n",
        "---"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bLYuwaW0RkUu",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "ed91b619-1007-4c2b-a762-05cdd907bf8d"
      },
      "source": [
        "mdp_graph, id_conversion_map = generic_ast_graphs.ast_to_graph(generic_ast, ast_spec=py_ast_graphs.PY_AST_SPECS)\n",
        "pprint(mdp_graph)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "{'root__Module': GraphNode(\n",
            "                     node_type='Module',\n",
            "                     out_edges={'body_out_all': [InputTaggedNode(\n",
            "                                                     node_id='root_body_0__Module_body-seq-helper',\n",
            "                                                     in_edge='parent_in')],\n",
            "                                'body_out_first': [InputTaggedNode(\n",
            "                                                       node_id='root_body_0__Module_body-seq-helper',\n",
            "                                                       in_edge='parent_in')],\n",
            "                                'body_out_last': [InputTaggedNode(\n",
            "                                                      node_id='root_body_0__Module_body-seq-helper',\n",
            "                                                      in_edge='parent_in')]}),\n",
            " 'root_body_0__Module_body-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='Module_body-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root__Module', in_edge='body_in')],\n",
            "                  'item_out': [InputTaggedNode(node_id='root_body_0_item__FunctionDef', in_edge='parent_in')],\n",
            "                  'prev_out': [InputTaggedNode(node_id='root_body_0__Module_body-seq-helper', in_edge='prev_missing')],\n",
            "                  'next_out': [InputTaggedNode(node_id='root_body_0__Module_body-seq-helper', in_edge='next_missing')]}),\n",
            " 'root_body_0_item__FunctionDef':\n",
            "   GraphNode(\n",
            "       node_type='FunctionDef',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0__Module_body-seq-helper', in_edge='item_in')],\n",
            "                  'args_out': [InputTaggedNode(node_id='root_body_0_item_args__arguments', in_edge='parent_in')],\n",
            "                  'returns_out': [InputTaggedNode(node_id='root_body_0_item__FunctionDef', in_edge='returns_missing')],\n",
            "                  'body_out_all': [InputTaggedNode(\n",
            "                                       node_id='root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
            "                                       in_edge='parent_in'),\n",
            "                                   InputTaggedNode(\n",
            "                                       node_id='root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
            "                                       in_edge='parent_in')],\n",
            "                  'body_out_first': [InputTaggedNode(\n",
            "                                         node_id='root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
            "                                         in_edge='parent_in')],\n",
            "                  'body_out_last': [InputTaggedNode(\n",
            "                                        node_id='root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
            "                                        in_edge='parent_in')]}),\n",
            " 'root_body_0_item_args__arguments':\n",
            "   GraphNode(\n",
            "       node_type='arguments',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item__FunctionDef', in_edge='args_in')],\n",
            "                  'args_out_all': [InputTaggedNode(\n",
            "                                       node_id='root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
            "                                       in_edge='parent_in'),\n",
            "                                   InputTaggedNode(\n",
            "                                       node_id='root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
            "                                       in_edge='parent_in')],\n",
            "                  'args_out_first': [InputTaggedNode(\n",
            "                                         node_id='root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
            "                                         in_edge='parent_in')],\n",
            "                  'args_out_last': [InputTaggedNode(\n",
            "                                        node_id='root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
            "                                        in_edge='parent_in')]}),\n",
            " 'root_body_0_item_args_args_0__arguments_args-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='arguments_args-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_args__arguments', in_edge='args_in')],\n",
            "                  'item_out': [InputTaggedNode(node_id='root_body_0_item_args_args_0_item__Name', in_edge='parent_in')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
            "                                   in_edge='prev_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
            "                                   in_edge='prev_missing')]}),\n",
            " 'root_body_0_item_args_args_0_item__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
            "                                     in_edge='item_in')]}),\n",
            " 'root_body_0_item_args_args_1__arguments_args-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='arguments_args-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_args__arguments', in_edge='args_in')],\n",
            "                  'item_out': [InputTaggedNode(node_id='root_body_0_item_args_args_1_item__Name', in_edge='parent_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
            "                                   in_edge='next_in')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
            "                                   in_edge='next_missing')]}),\n",
            " 'root_body_0_item_args_args_1_item__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
            "                                     in_edge='item_in')]}),\n",
            " 'root_body_0_item_body_0__FunctionDef_body-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='FunctionDef_body-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item__FunctionDef', in_edge='body_in')],\n",
            "                  'item_out': [InputTaggedNode(node_id='root_body_0_item_body_0_item__Assign', in_edge='parent_in')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
            "                                   in_edge='prev_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
            "                                   in_edge='prev_missing')]}),\n",
            " 'root_body_0_item_body_0_item__Assign':\n",
            "   GraphNode(\n",
            "       node_type='Assign',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
            "                                     in_edge='item_in')],\n",
            "                  'targets_out': [InputTaggedNode(node_id='root_body_0_item_body_0_item_targets__Name', in_edge='parent_in')],\n",
            "                  'value_out': [InputTaggedNode(node_id='root_body_0_item_body_0_item_value__Name', in_edge='parent_in')]}),\n",
            " 'root_body_0_item_body_0_item_targets__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_body_0_item__Assign', in_edge='targets_in')]}),\n",
            " 'root_body_0_item_body_0_item_value__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_body_0_item__Assign', in_edge='value_in')]}),\n",
            " 'root_body_0_item_body_1__FunctionDef_body-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='FunctionDef_body-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item__FunctionDef', in_edge='body_in')],\n",
            "                  'item_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item__If', in_edge='parent_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
            "                                   in_edge='next_in')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
            "                                   in_edge='next_missing')]}),\n",
            " 'root_body_0_item_body_1_item__If':\n",
            "   GraphNode(\n",
            "       node_type='If',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
            "                                     in_edge='item_in')],\n",
            "                  'test_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item_test__BoolOp', in_edge='parent_in')],\n",
            "                  'body_out_all': [InputTaggedNode(\n",
            "                                       node_id='root_body_0_item_body_1_item_body_0__If_body-seq-helper',\n",
            "                                       in_edge='parent_in')],\n",
            "                  'body_out_first': [InputTaggedNode(\n",
            "                                         node_id='root_body_0_item_body_1_item_body_0__If_body-seq-helper',\n",
            "                                         in_edge='parent_in')],\n",
            "                  'body_out_last': [InputTaggedNode(\n",
            "                                        node_id='root_body_0_item_body_1_item_body_0__If_body-seq-helper',\n",
            "                                        in_edge='parent_in')],\n",
            "                  'orelse_out_all': [InputTaggedNode(\n",
            "                                         node_id='root_body_0_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
            "                                         in_edge='parent_in')],\n",
            "                  'orelse_out_first': [InputTaggedNode(\n",
            "                                           node_id='root_body_0_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
            "                                           in_edge='parent_in')],\n",
            "                  'orelse_out_last': [InputTaggedNode(\n",
            "                                          node_id='root_body_0_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
            "                                          in_edge='parent_in')]}),\n",
            " 'root_body_0_item_body_1_item_test__BoolOp':\n",
            "   GraphNode(\n",
            "       node_type='BoolOp',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item__If', in_edge='test_in')],\n",
            "                  'op_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item_test_op__And', in_edge='parent_in')],\n",
            "                  'values_out_all': [InputTaggedNode(\n",
            "                                         node_id='root_body_0_item_body_1_item_test_values_0__BoolOp_values-seq-helper',\n",
            "                                         in_edge='parent_in'),\n",
            "                                     InputTaggedNode(\n",
            "                                         node_id='root_body_0_item_body_1_item_test_values_1__BoolOp_values-seq-helper',\n",
            "                                         in_edge='parent_in')],\n",
            "                  'values_out_first': [InputTaggedNode(\n",
            "                                           node_id='root_body_0_item_body_1_item_test_values_0__BoolOp_values-seq-helper',\n",
            "                                           in_edge='parent_in')],\n",
            "                  'values_out_last': [InputTaggedNode(\n",
            "                                          node_id='root_body_0_item_body_1_item_test_values_1__BoolOp_values-seq-helper',\n",
            "                                          in_edge='parent_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_op__And':\n",
            "   GraphNode(\n",
            "       node_type='And',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item_test__BoolOp', in_edge='op_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_0__BoolOp_values-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='BoolOp_values-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item_test__BoolOp', in_edge='values_in')],\n",
            "                  'item_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_0_item__Constant',\n",
            "                                   in_edge='parent_in')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1__BoolOp_values-seq-helper',\n",
            "                                   in_edge='prev_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_0__BoolOp_values-seq-helper',\n",
            "                                   in_edge='prev_missing')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_0_item__Constant':\n",
            "   GraphNode(\n",
            "       node_type='Constant',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_0__BoolOp_values-seq-helper',\n",
            "                                     in_edge='item_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1__BoolOp_values-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='BoolOp_values-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item_test__BoolOp', in_edge='values_in')],\n",
            "                  'item_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item__Compare',\n",
            "                                   in_edge='parent_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_0__BoolOp_values-seq-helper',\n",
            "                                   in_edge='next_in')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1__BoolOp_values-seq-helper',\n",
            "                                   in_edge='next_missing')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item__Compare':\n",
            "   GraphNode(\n",
            "       node_type='Compare',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1__BoolOp_values-seq-helper',\n",
            "                                     in_edge='item_in')],\n",
            "                  'left_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item_left__Name',\n",
            "                                   in_edge='parent_in')],\n",
            "                  'ops_out': [InputTaggedNode(\n",
            "                                  node_id='root_body_0_item_body_1_item_test_values_1_item_ops__Gt',\n",
            "                                  in_edge='parent_in')],\n",
            "                  'comparators_out': [InputTaggedNode(\n",
            "                                          node_id='root_body_0_item_body_1_item_test_values_1_item_comparators__Call',\n",
            "                                          in_edge='parent_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item_left__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1_item__Compare',\n",
            "                                     in_edge='left_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item_ops__Gt':\n",
            "   GraphNode(\n",
            "       node_type='Gt',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1_item__Compare',\n",
            "                                     in_edge='ops_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item_comparators__Call':\n",
            "   GraphNode(\n",
            "       node_type='Call',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1_item__Compare',\n",
            "                                     in_edge='comparators_in')],\n",
            "                  'func_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_func__Name',\n",
            "                                   in_edge='parent_in')],\n",
            "                  'args_out_all': [InputTaggedNode(\n",
            "                                       node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_0__Call_args-seq-helper',\n",
            "                                       in_edge='parent_in'),\n",
            "                                   InputTaggedNode(\n",
            "                                       node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_1__Call_args-seq-helper',\n",
            "                                       in_edge='parent_in')],\n",
            "                  'args_out_first': [InputTaggedNode(\n",
            "                                         node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_0__Call_args-seq-helper',\n",
            "                                         in_edge='parent_in')],\n",
            "                  'args_out_last': [InputTaggedNode(\n",
            "                                        node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_1__Call_args-seq-helper',\n",
            "                                        in_edge='parent_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item_comparators_func__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1_item_comparators__Call',\n",
            "                                     in_edge='func_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item_comparators_args_0__Call_args-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='Call_args-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1_item_comparators__Call',\n",
            "                                     in_edge='args_in')],\n",
            "                  'item_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_0_item__Name',\n",
            "                                   in_edge='parent_in')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_1__Call_args-seq-helper',\n",
            "                                   in_edge='prev_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_0__Call_args-seq-helper',\n",
            "                                   in_edge='prev_missing')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item_comparators_args_0_item__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_0__Call_args-seq-helper',\n",
            "                                     in_edge='item_in')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item_comparators_args_1__Call_args-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='Call_args-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1_item_comparators__Call',\n",
            "                                     in_edge='args_in')],\n",
            "                  'item_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_1_item__Name',\n",
            "                                   in_edge='parent_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_0__Call_args-seq-helper',\n",
            "                                   in_edge='next_in')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_1__Call_args-seq-helper',\n",
            "                                   in_edge='next_missing')]}),\n",
            " 'root_body_0_item_body_1_item_test_values_1_item_comparators_args_1_item__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_test_values_1_item_comparators_args_1__Call_args-seq-helper',\n",
            "                                     in_edge='item_in')]}),\n",
            " 'root_body_0_item_body_1_item_body_0__If_body-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='If_body-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item__If', in_edge='body_in')],\n",
            "                  'item_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_body_0_item__Assign',\n",
            "                                   in_edge='parent_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_body_0__If_body-seq-helper',\n",
            "                                   in_edge='prev_missing')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_body_0__If_body-seq-helper',\n",
            "                                   in_edge='next_missing')]}),\n",
            " 'root_body_0_item_body_1_item_body_0_item__Assign':\n",
            "   GraphNode(\n",
            "       node_type='Assign',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_body_0__If_body-seq-helper',\n",
            "                                     in_edge='item_in')],\n",
            "                  'targets_out': [InputTaggedNode(\n",
            "                                      node_id='root_body_0_item_body_1_item_body_0_item_targets__Name',\n",
            "                                      in_edge='parent_in')],\n",
            "                  'value_out': [InputTaggedNode(\n",
            "                                    node_id='root_body_0_item_body_1_item_body_0_item_value__Name',\n",
            "                                    in_edge='parent_in')]}),\n",
            " 'root_body_0_item_body_1_item_body_0_item_targets__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_body_0_item__Assign',\n",
            "                                     in_edge='targets_in')]}),\n",
            " 'root_body_0_item_body_1_item_body_0_item_value__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_body_0_item__Assign',\n",
            "                                     in_edge='value_in')]}),\n",
            " 'root_body_0_item_body_1_item_orelse_0__If_orelse-seq-helper':\n",
            "   GraphNode(\n",
            "       node_type='If_orelse-seq-helper',\n",
            "       out_edges={'parent_out': [InputTaggedNode(node_id='root_body_0_item_body_1_item__If', in_edge='orelse_in')],\n",
            "                  'item_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_orelse_0_item__Assign',\n",
            "                                   in_edge='parent_in')],\n",
            "                  'prev_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
            "                                   in_edge='prev_missing')],\n",
            "                  'next_out': [InputTaggedNode(\n",
            "                                   node_id='root_body_0_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
            "                                   in_edge='next_missing')]}),\n",
            " 'root_body_0_item_body_1_item_orelse_0_item__Assign':\n",
            "   GraphNode(\n",
            "       node_type='Assign',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
            "                                     in_edge='item_in')],\n",
            "                  'targets_out': [InputTaggedNode(\n",
            "                                      node_id='root_body_0_item_body_1_item_orelse_0_item_targets__Name',\n",
            "                                      in_edge='parent_in')],\n",
            "                  'value_out': [InputTaggedNode(\n",
            "                                    node_id='root_body_0_item_body_1_item_orelse_0_item_value__Name',\n",
            "                                    in_edge='parent_in')]}),\n",
            " 'root_body_0_item_body_1_item_orelse_0_item_targets__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_orelse_0_item__Assign',\n",
            "                                     in_edge='targets_in')]}),\n",
            " 'root_body_0_item_body_1_item_orelse_0_item_value__Name':\n",
            "   GraphNode(\n",
            "       node_type='Name',\n",
            "       out_edges={'parent_out': [InputTaggedNode(\n",
            "                                     node_id='root_body_0_item_body_1_item_orelse_0_item__Assign',\n",
            "                                     in_edge='value_in')]})}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "nkkIh-RTS75h"
      },
      "source": [
        "This graph is associated with a `GraphSchema` object that declares the set of all actions and observations for graphs in this MDP family. (As discussed above, the `in_edges` field specifies the set of observations, and the `out_edges` field specifies the set of possible actions.)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sPBY0OF_VsaT",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "40c6d18d-2474-42df-bf6e-ca2dd144b6c6"
      },
      "source": [
        "py_ast_graphs.SCHEMA"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'Add': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'And': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Assign': NodeSchema(in_edges=['parent_in', 'targets_in', 'value_in'], out_edges=['parent_out', 'targets_out', 'value_out']),\n",
              " 'BinOp': NodeSchema(in_edges=['parent_in', 'left_in', 'op_in', 'right_in'], out_edges=['parent_out', 'left_out', 'op_out', 'right_out']),\n",
              " 'BoolOp': NodeSchema(in_edges=['parent_in', 'op_in', 'values_in'], out_edges=['parent_out', 'op_out', 'values_out_all', 'values_out_first', 'values_out_last']),\n",
              " 'BoolOp_values-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out']),\n",
              " 'Break': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Call': NodeSchema(in_edges=['parent_in', 'func_in', 'args_in', 'args_missing'], out_edges=['parent_out', 'func_out', 'args_out_all', 'args_out_first', 'args_out_last']),\n",
              " 'Call_args-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out']),\n",
              " 'Compare': NodeSchema(in_edges=['parent_in', 'left_in', 'ops_in', 'comparators_in'], out_edges=['parent_out', 'left_out', 'ops_out', 'comparators_out']),\n",
              " 'Constant': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Continue': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Div': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Eq': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Expr': NodeSchema(in_edges=['parent_in', 'value_in'], out_edges=['parent_out', 'value_out']),\n",
              " 'For': NodeSchema(in_edges=['parent_in', 'target_in', 'iter_in', 'body_in'], out_edges=['parent_out', 'target_out', 'iter_out', 'body_out_all', 'body_out_first', 'body_out_last']),\n",
              " 'For_body-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out']),\n",
              " 'FunctionDef': NodeSchema(in_edges=['parent_in', 'args_in', 'returns_in', 'returns_missing', 'body_in'], out_edges=['parent_out', 'args_out', 'returns_out', 'body_out_all', 'body_out_first', 'body_out_last']),\n",
              " 'FunctionDef_body-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out']),\n",
              " 'Gt': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'GtE': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'If': NodeSchema(in_edges=['parent_in', 'test_in', 'body_in', 'orelse_in', 'orelse_missing'], out_edges=['parent_out', 'test_out', 'body_out_all', 'body_out_first', 'body_out_last', 'orelse_out_all', 'orelse_out_first', 'orelse_out_last']),\n",
              " 'If_body-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out']),\n",
              " 'If_orelse-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out']),\n",
              " 'Lt': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'LtE': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Module': NodeSchema(in_edges=['body_in'], out_edges=['body_out_all', 'body_out_first', 'body_out_last']),\n",
              " 'Module_body-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out']),\n",
              " 'Mult': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Name': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'NotEq': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Or': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Pass': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'Return': NodeSchema(in_edges=['parent_in', 'value_in', 'value_missing'], out_edges=['parent_out', 'value_out']),\n",
              " 'Sub': NodeSchema(in_edges=['parent_in'], out_edges=['parent_out']),\n",
              " 'While': NodeSchema(in_edges=['parent_in', 'test_in', 'body_in'], out_edges=['parent_out', 'test_out', 'body_out_all', 'body_out_first', 'body_out_last']),\n",
              " 'While_body-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out']),\n",
              " 'arguments': NodeSchema(in_edges=['parent_in', 'args_in', 'args_missing'], out_edges=['parent_out', 'args_out_all', 'args_out_first', 'args_out_last']),\n",
              " 'arguments_args-seq-helper': NodeSchema(in_edges=['parent_in', 'item_in', 'next_in', 'next_missing', 'prev_in', 'prev_missing'], out_edges=['parent_out', 'item_out', 'next_out', 'prev_out'])}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 15
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5W6vNmK_WHy3"
      },
      "source": [
        "And we can confirm that our MDP graph conforms to this schema:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LXSJifdkWPkr",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "529854f4-c3a6-41a1-e4fa-504d0f2e4f3b"
      },
      "source": [
        "schema_util.assert_conforms_to_schema(mdp_graph, py_ast_graphs.SCHEMA)\n",
        "print(\"assertion passed!\")"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "assertion passed!\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "u0we8ymiXWB2"
      },
      "source": [
        "This means that we can parameterize a GFSA layer based on `py_ast_graphs.SCHEMA`, and then pass `mdp_graph` as an input to it."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "exldzBx-ooTs"
      },
      "source": [
        "## Computing ground-truth static analyses"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5QwyqWR2s_5a"
      },
      "source": [
        "Suppose we wish to train a GFSA layer to perform static analyses of Python code. The next step is to build the ground-truth data for those analyses.\n",
        "\n",
        "The implementation of the static analyses used in the paper is not yet open source, so for now let's consider a simpler form of static analysis: finding the target of `return`, `break`, and `continue` statements. More specifically:\n",
        "\n",
        "- For each `return` statement, we add an edge from the `Return` AST node to the `FunctionDef` AST node defining the function. If there is a return value, we also add an edge from the return value to the `FunctionDef` AST node.\n",
        "- For each `break` or `continue` statement, we add an edge from the `Break`/`Continue` AST node to the innermost `For`/`While` node that it is contained inside. This is the loop whose execution will be broken out of or continued with, respectively.\n",
        "\n",
        "(This can be seen as a simplified type of control flow analysis, where we only consider return, break, and continue statements.)\n",
        "\n",
        "First, let's sample a program:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GFQxTLGkZyXZ",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "abb29704-c374-4513-bc63-05f4b9618a9f"
      },
      "source": [
        "# Use a distribution with more frequent return/break/continue statements\n",
        "the_ast = tasks.make_ast(64, np.random.RandomState(3), python_numbers_control_flow.CFG_DISTRIBUTION)\n",
        "print(astunparse.unparse(gast.gast_to_ast(the_ast)))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "\n",
            "\n",
            "def random_function(a, b):\n",
            "    print(a)\n",
            "    v2 = 44\n",
            "    for v3 in range(int(37)):\n",
            "        print(a)\n",
            "        if (a == v3):\n",
            "            print(a)\n",
            "        elif (77 > v3):\n",
            "            return\n",
            "        elif True:\n",
            "            pass\n",
            "        return\n",
            "    if (((b + 81) + 11) <= 32):\n",
            "        for v3 in range(int(a)):\n",
            "            break\n",
            "    v3 = 92\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "HcHccC_1dbap"
      },
      "source": [
        "Now we convert it to an MDP graph:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ypeUGgEEaID7"
      },
      "source": [
        "generic_ast = py_ast_graphs.py_ast_to_generic(the_ast)\n",
        "mdp_graph, id_conversion_map = generic_ast_graphs.ast_to_graph(generic_ast, ast_spec=py_ast_graphs.PY_AST_SPECS)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5R94VQzede43"
      },
      "source": [
        "And finally, we compute the target edges for this simple task. Each edge is represented as a tuple `(source_id, dest_id, type)`.\n",
        "\n",
        "- Two edges connect each of the two `return` statements (denoted `root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0_item__Return` and `root_body_0_item_body_2_item_body_2_item__Return` based on their locations in the AST) to the function definition node (`root_body_0_item__FunctionDef`).\n",
        "- One edge connects the break statement (`root_body_0_item_body_3_item_body_0_item_body_0_item__Break`) to the for loop containing it (`root_body_0_item_body_3_item_body_0_item__For`).\n",
        "- All of these edges have type \"EXTRA_JUMPS_OUT_OF\", which is just a string that we use to distinguish these edges from other types of edge."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GjZBkaCEoqlb",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "102a2776-785a-4eaf-ec85-6f979d7a09e3"
      },
      "source": [
        "target_edges = graph_edge_util.compute_jumps_out_edges(the_ast, id_conversion_map)\n",
        "target_edges"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[('root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0_item__Return',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'EXTRA_JUMPS_OUT_OF'),\n",
              " ('root_body_0_item_body_2_item_body_2_item__Return',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'EXTRA_JUMPS_OUT_OF'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_body_0_item__Break',\n",
              "  'root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'EXTRA_JUMPS_OUT_OF')]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 19
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fwNaDXfraX-h"
      },
      "source": [
        "These edges will be used as the targets for our layer."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5Vu4sgNybX_X"
      },
      "source": [
        "## Other edges"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "532fJlXua9LD"
      },
      "source": [
        "We can also compute other edges from our AST, which are useful when running a baseline graph neural network on the same targets, or to provide additional observations to the GFSA layer. We won't technically need these for this particular toy problem, so feel free to skip this section, but here they are for completeness:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DIOmFoSda2cJ",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "36a0bbd3-9dca-48df-f718-b30369014e48"
      },
      "source": [
        "other_edges = []\n",
        "\n",
        "# Add edges based on the transitions in the MDP (which are in turn based on\n",
        "# the parent-child relationships in the AST).\n",
        "# These edges will have types like `SCHEMA_body_out_last` (which means that it\n",
        "# is derived from the MDP schema, and connects nodes that are reachable using\n",
        "# the `body_out_last` action. In this case, this is the same as connecting each\n",
        "# control flow AST node to the last statement in the contained block.)\n",
        "other_edges.extend(graph_edge_util.compute_schema_edges(mdp_graph))\n",
        "\n",
        "# Add edges between uses of the same identifier. These edges will have type\n",
        "# \"EXTRA_SAME_IDENTIFIER\".\n",
        "other_edges.extend(\n",
        "    graph_edge_util.compute_same_identifier_edges(the_ast, id_conversion_map))\n",
        "\n",
        "# For the experiments in the paper, we would also include edges based on more\n",
        "# sophisticated static analyses, but the code for computing those is not yet\n",
        "# open-source.\n",
        "\n",
        "other_edges"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[('root__Module',\n",
              "  'root_body_0__Module_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root__Module',\n",
              "  'root_body_0__Module_body-seq-helper',\n",
              "  'SCHEMA_body_out_first'),\n",
              " ('root__Module',\n",
              "  'root_body_0__Module_body-seq-helper',\n",
              "  'SCHEMA_body_out_last'),\n",
              " ('root_body_0__Module_body-seq-helper', 'root__Module', 'SCHEMA_parent_out'),\n",
              " ('root_body_0__Module_body-seq-helper',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0__Module_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0_item_args__arguments',\n",
              "  'SCHEMA_args_out'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0_item_body_2__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0_item_body_3__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0_item_body_4__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_body_out_first'),\n",
              " ('root_body_0_item__FunctionDef',\n",
              "  'root_body_0_item_body_4__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_body_out_last'),\n",
              " ('root_body_0_item_args__arguments',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_args__arguments',\n",
              "  'root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_args__arguments',\n",
              "  'root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_args__arguments',\n",
              "  'root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
              "  'SCHEMA_args_out_first'),\n",
              " ('root_body_0_item_args__arguments',\n",
              "  'root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
              "  'SCHEMA_args_out_last'),\n",
              " ('root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
              "  'root_body_0_item_args__arguments',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
              "  'root_body_0_item_args_args_0_item__Name',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
              "  'root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
              "  'SCHEMA_next_out'),\n",
              " ('root_body_0_item_args_args_0_item__Name',\n",
              "  'root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
              "  'root_body_0_item_args__arguments',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
              "  'root_body_0_item_args_args_1_item__Name',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
              "  'root_body_0_item_args_args_0__arguments_args-seq-helper',\n",
              "  'SCHEMA_prev_out'),\n",
              " ('root_body_0_item_args_args_1_item__Name',\n",
              "  'root_body_0_item_args_args_1__arguments_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_0_item__Expr',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_next_out'),\n",
              " ('root_body_0_item_body_0_item__Expr',\n",
              "  'root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_0_item__Expr',\n",
              "  'root_body_0_item_body_0_item_value__Call',\n",
              "  'SCHEMA_value_out'),\n",
              " ('root_body_0_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_0_item__Expr',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_0_item_value_func__Name',\n",
              "  'SCHEMA_func_out'),\n",
              " ('root_body_0_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_first'),\n",
              " ('root_body_0_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_last'),\n",
              " ('root_body_0_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_0_item_value__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_0_item_value__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_1_item__Assign',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_0__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_prev_out'),\n",
              " ('root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_2__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_next_out'),\n",
              " ('root_body_0_item_body_1_item__Assign',\n",
              "  'root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_1_item__Assign',\n",
              "  'root_body_0_item_body_1_item_targets__Name',\n",
              "  'SCHEMA_targets_out'),\n",
              " ('root_body_0_item_body_1_item__Assign',\n",
              "  'root_body_0_item_body_1_item_value__Constant',\n",
              "  'SCHEMA_value_out'),\n",
              " ('root_body_0_item_body_1_item_targets__Name',\n",
              "  'root_body_0_item_body_1_item__Assign',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_1_item_value__Constant',\n",
              "  'root_body_0_item_body_1_item__Assign',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item__For',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_1__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_prev_out'),\n",
              " ('root_body_0_item_body_2__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_3__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_next_out'),\n",
              " ('root_body_0_item_body_2_item__For',\n",
              "  'root_body_0_item_body_2__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item__For',\n",
              "  'root_body_0_item_body_2_item_target__Name',\n",
              "  'SCHEMA_target_out'),\n",
              " ('root_body_0_item_body_2_item__For',\n",
              "  'root_body_0_item_body_2_item_iter__Call',\n",
              "  'SCHEMA_iter_out'),\n",
              " ('root_body_0_item_body_2_item__For',\n",
              "  'root_body_0_item_body_2_item_body_0__For_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item_body_2_item__For',\n",
              "  'root_body_0_item_body_2_item_body_1__For_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item_body_2_item__For',\n",
              "  'root_body_0_item_body_2_item_body_2__For_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item_body_2_item__For',\n",
              "  'root_body_0_item_body_2_item_body_0__For_body-seq-helper',\n",
              "  'SCHEMA_body_out_first'),\n",
              " ('root_body_0_item_body_2_item__For',\n",
              "  'root_body_0_item_body_2_item_body_2__For_body-seq-helper',\n",
              "  'SCHEMA_body_out_last'),\n",
              " ('root_body_0_item_body_2_item_target__Name',\n",
              "  'root_body_0_item_body_2_item__For',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_iter__Call',\n",
              "  'root_body_0_item_body_2_item__For',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_iter__Call',\n",
              "  'root_body_0_item_body_2_item_iter_func__Name',\n",
              "  'SCHEMA_func_out'),\n",
              " ('root_body_0_item_body_2_item_iter__Call',\n",
              "  'root_body_0_item_body_2_item_iter_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_body_2_item_iter__Call',\n",
              "  'root_body_0_item_body_2_item_iter_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_first'),\n",
              " ('root_body_0_item_body_2_item_iter__Call',\n",
              "  'root_body_0_item_body_2_item_iter_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_last'),\n",
              " ('root_body_0_item_body_2_item_iter_func__Name',\n",
              "  'root_body_0_item_body_2_item_iter__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_2_item_iter__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item__Call',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_2_item_iter_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item_func__Name',\n",
              "  'SCHEMA_func_out'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_first'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_last'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item_func__Name',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item_args_0_item__Constant',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item_args_0_item__Constant',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_0__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item__For',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_0__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_0_item__Expr',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_0__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1__For_body-seq-helper',\n",
              "  'SCHEMA_next_out'),\n",
              " ('root_body_0_item_body_2_item_body_0_item__Expr',\n",
              "  'root_body_0_item_body_2_item_body_0__For_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_0_item__Expr',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value__Call',\n",
              "  'SCHEMA_value_out'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_0_item__Expr',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_func__Name',\n",
              "  'SCHEMA_func_out'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_first'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_last'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item__For',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_1__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_0__For_body-seq-helper',\n",
              "  'SCHEMA_prev_out'),\n",
              " ('root_body_0_item_body_2_item_body_1__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_2__For_body-seq-helper',\n",
              "  'SCHEMA_next_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1__For_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test__Compare',\n",
              "  'SCHEMA_test_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_first'),\n",
              " ('root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_last'),\n",
              " ('root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
              "  'SCHEMA_orelse_out_all'),\n",
              " ('root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
              "  'SCHEMA_orelse_out_first'),\n",
              " ('root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
              "  'SCHEMA_orelse_out_last'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test__Compare',\n",
              "  'root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test__Compare',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'SCHEMA_left_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test__Compare',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_ops__Eq',\n",
              "  'SCHEMA_ops_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test__Compare',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'SCHEMA_comparators_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_ops__Eq',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0__If_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0__If_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item__Expr',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item__Expr',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item__Expr',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value__Call',\n",
              "  'SCHEMA_value_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item__Expr',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_func__Name',\n",
              "  'SCHEMA_func_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_first'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value__Call',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_last'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0__If_orelse-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test__Compare',\n",
              "  'SCHEMA_test_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_first'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_last'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0__If_orelse-seq-helper',\n",
              "  'SCHEMA_orelse_out_all'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0__If_orelse-seq-helper',\n",
              "  'SCHEMA_orelse_out_first'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0__If_orelse-seq-helper',\n",
              "  'SCHEMA_orelse_out_last'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test__Compare',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test__Compare',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_left__Constant',\n",
              "  'SCHEMA_left_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test__Compare',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_ops__Gt',\n",
              "  'SCHEMA_ops_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test__Compare',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'SCHEMA_comparators_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_left__Constant',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_ops__Gt',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0_item__Return',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0_item__Return',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0__If_orelse-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0__If_orelse-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item__If',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0__If_orelse-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_test__Constant',\n",
              "  'SCHEMA_test_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_first'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item__If',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_last'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_test__Constant',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_body_0_item__Pass',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_body_0_item__Pass',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_orelse_0_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_2__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item__For',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_2_item_body_2__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_2_item__Return',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_2_item_body_2__For_body-seq-helper',\n",
              "  'root_body_0_item_body_2_item_body_1__For_body-seq-helper',\n",
              "  'SCHEMA_prev_out'),\n",
              " ('root_body_0_item_body_2_item_body_2_item__Return',\n",
              "  'root_body_0_item_body_2_item_body_2__For_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_3_item__If',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_3__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_2__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_prev_out'),\n",
              " ('root_body_0_item_body_3__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_4__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_next_out'),\n",
              " ('root_body_0_item_body_3_item__If',\n",
              "  'root_body_0_item_body_3__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item__If',\n",
              "  'root_body_0_item_body_3_item_test__Compare',\n",
              "  'SCHEMA_test_out'),\n",
              " ('root_body_0_item_body_3_item__If',\n",
              "  'root_body_0_item_body_3_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item_body_3_item__If',\n",
              "  'root_body_0_item_body_3_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_first'),\n",
              " ('root_body_0_item_body_3_item__If',\n",
              "  'root_body_0_item_body_3_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_body_out_last'),\n",
              " ('root_body_0_item_body_3_item_test__Compare',\n",
              "  'root_body_0_item_body_3_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test__Compare',\n",
              "  'root_body_0_item_body_3_item_test_left__BinOp',\n",
              "  'SCHEMA_left_out'),\n",
              " ('root_body_0_item_body_3_item_test__Compare',\n",
              "  'root_body_0_item_body_3_item_test_ops__LtE',\n",
              "  'SCHEMA_ops_out'),\n",
              " ('root_body_0_item_body_3_item_test__Compare',\n",
              "  'root_body_0_item_body_3_item_test_comparators__Constant',\n",
              "  'SCHEMA_comparators_out'),\n",
              " ('root_body_0_item_body_3_item_test_left__BinOp',\n",
              "  'root_body_0_item_body_3_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test_left__BinOp',\n",
              "  'root_body_0_item_body_3_item_test_left_left__BinOp',\n",
              "  'SCHEMA_left_out'),\n",
              " ('root_body_0_item_body_3_item_test_left__BinOp',\n",
              "  'root_body_0_item_body_3_item_test_left_op__Add',\n",
              "  'SCHEMA_op_out'),\n",
              " ('root_body_0_item_body_3_item_test_left__BinOp',\n",
              "  'root_body_0_item_body_3_item_test_left_right__Constant',\n",
              "  'SCHEMA_right_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_left__BinOp',\n",
              "  'root_body_0_item_body_3_item_test_left__BinOp',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_left__BinOp',\n",
              "  'root_body_0_item_body_3_item_test_left_left_left__Name',\n",
              "  'SCHEMA_left_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_left__BinOp',\n",
              "  'root_body_0_item_body_3_item_test_left_left_op__Add',\n",
              "  'SCHEMA_op_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_left__BinOp',\n",
              "  'root_body_0_item_body_3_item_test_left_left_right__Constant',\n",
              "  'SCHEMA_right_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_left_left__Name',\n",
              "  'root_body_0_item_body_3_item_test_left_left__BinOp',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_left_op__Add',\n",
              "  'root_body_0_item_body_3_item_test_left_left__BinOp',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_left_right__Constant',\n",
              "  'root_body_0_item_body_3_item_test_left_left__BinOp',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_op__Add',\n",
              "  'root_body_0_item_body_3_item_test_left__BinOp',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test_left_right__Constant',\n",
              "  'root_body_0_item_body_3_item_test_left__BinOp',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test_ops__LtE',\n",
              "  'root_body_0_item_body_3_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_test_comparators__Constant',\n",
              "  'root_body_0_item_body_3_item_test__Compare',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0__If_body-seq-helper',\n",
              "  'root_body_0_item_body_3_item__If',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0__If_body-seq-helper',\n",
              "  'root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'root_body_0_item_body_3_item_body_0__If_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'SCHEMA_target_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter__Call',\n",
              "  'SCHEMA_iter_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'root_body_0_item_body_3_item_body_0_item_body_0__For_body-seq-helper',\n",
              "  'SCHEMA_body_out_all'),\n",
              " ('root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'root_body_0_item_body_3_item_body_0_item_body_0__For_body-seq-helper',\n",
              "  'SCHEMA_body_out_first'),\n",
              " ('root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'root_body_0_item_body_3_item_body_0_item_body_0__For_body-seq-helper',\n",
              "  'SCHEMA_body_out_last'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_func__Name',\n",
              "  'SCHEMA_func_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_first'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_last'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_func__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item__Call',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_func__Name',\n",
              "  'SCHEMA_func_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_all'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_first'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item__Call',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_args_out_last'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_func__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item__Call',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0__Call_args-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_body_0__For_body-seq-helper',\n",
              "  'root_body_0_item_body_3_item_body_0_item__For',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_body_0__For_body-seq-helper',\n",
              "  'root_body_0_item_body_3_item_body_0_item_body_0_item__Break',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_body_0_item__Break',\n",
              "  'root_body_0_item_body_3_item_body_0_item_body_0__For_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_4__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item__FunctionDef',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_4__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_4_item__Assign',\n",
              "  'SCHEMA_item_out'),\n",
              " ('root_body_0_item_body_4__FunctionDef_body-seq-helper',\n",
              "  'root_body_0_item_body_3__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_prev_out'),\n",
              " ('root_body_0_item_body_4_item__Assign',\n",
              "  'root_body_0_item_body_4__FunctionDef_body-seq-helper',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_4_item__Assign',\n",
              "  'root_body_0_item_body_4_item_targets__Name',\n",
              "  'SCHEMA_targets_out'),\n",
              " ('root_body_0_item_body_4_item__Assign',\n",
              "  'root_body_0_item_body_4_item_value__Constant',\n",
              "  'SCHEMA_value_out'),\n",
              " ('root_body_0_item_body_4_item_targets__Name',\n",
              "  'root_body_0_item_body_4_item__Assign',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_body_4_item_value__Constant',\n",
              "  'root_body_0_item_body_4_item__Assign',\n",
              "  'SCHEMA_parent_out'),\n",
              " ('root_body_0_item_args_args_0_item__Name',\n",
              "  'root_body_0_item_args_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_args_args_1_item__Name',\n",
              "  'root_body_0_item_args_args_1_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_1_item_targets__Name',\n",
              "  'root_body_0_item_body_1_item_targets__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_target__Name',\n",
              "  'root_body_0_item_body_2_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_4_item_targets__Name',\n",
              "  'root_body_0_item_body_2_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_target__Name',\n",
              "  'root_body_0_item_body_4_item_targets__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_4_item_targets__Name',\n",
              "  'root_body_0_item_body_4_item_targets__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_args_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_args_args_0_item__Name',\n",
              "  'root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_iter_func__Name',\n",
              "  'root_body_0_item_body_2_item_iter_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'root_body_0_item_body_2_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_target__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'root_body_0_item_body_4_item_targets__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_4_item_targets__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item_func__Name',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_args_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_args_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'root_body_0_item_args_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_args_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_2_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_target__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_4_item_targets__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_4_item_targets__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_func__Name',\n",
              "  'root_body_0_item_body_2_item_iter_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_iter_func__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_func__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_func__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_args_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_args_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_2_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_target__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_4_item_targets__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_4_item_targets__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_target__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_orelse_0_item_test_comparators__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_test_left_left_left__Name',\n",
              "  'root_body_0_item_args_args_1_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_args_args_1_item__Name',\n",
              "  'root_body_0_item_body_3_item_test_left_left_left__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_test_left_left_left__Name',\n",
              "  'root_body_0_item_body_3_item_test_left_left_left__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_func__Name',\n",
              "  'root_body_0_item_body_2_item_iter_args_0_item_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_iter_args_0_item_func__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_func__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_func__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'root_body_0_item_args_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_args_args_0_item__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_test_left__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_2_item_body_1_item_body_0_item_value_args_0_item__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER'),\n",
              " ('root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'root_body_0_item_body_3_item_body_0_item_iter_args_0_item_args_0_item__Name',\n",
              "  'EXTRA_SAME_IDENTIFIER')]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 20
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2skDttb0cHZb"
      },
      "source": [
        "all_edges = target_edges + other_edges"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "JRvkDejquH-2"
      },
      "source": [
        "## Converting our examples to NDArrays"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LvJtmz52uPI4"
      },
      "source": [
        "The next step is to encode the examples in terms of JAX arrays that we can run our model on.\n",
        "\n",
        "Each example is encoded as a `GraphBundle`, which contains:\n",
        "\n",
        "- `automaton_graph`: a sparse representation of the environment dynamics of the corresponding graph MDP. Conceptually, it contains a list of transitions, each of which is associated with a source node, a source observation, an action, a destination node, a destination observation, and a probability of moving to that destination with that observation when taking that action. It is stored in a particular arrangement to make computation efficient; see the docstring for `EncodedGraph` in `automaton_builder.py` for more details.\n",
        "- `graph_metadata`: information about the size of the graph.\n",
        "- `node_types`: a list of integer node type indices.\n",
        "- `edges`: a sparse representation of the labeled adjacency matrix for the graph.\n",
        "\n",
        "The `automaton_graph` is used to run the GFSA layer, and the `node_types` and `edges` are used to compute the loss and also to run normal graph-neural-network layers."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fVRl8y6buOt_"
      },
      "source": [
        "EDGE_TYPES = sorted({\n",
        "    graph_edge_util.JUMPS_OUT_OF_EDGE_TYPE,\n",
        "    graph_edge_util.SAME_IDENTIFIER_EDGE_TYPE,\n",
        "    *graph_edge_util.schema_edge_types(py_ast_graphs.SCHEMA),\n",
        "})"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GVzO-EdQtGoJ"
      },
      "source": [
        "# Encode our edges into a coordinate matrix.\n",
        "encoded_edges = graph_edge_util.encode_edges(all_edges, EDGE_TYPES)\n",
        "# Encode the MDP as a sparse transition matrix.\n",
        "builder = automaton_builder.AutomatonBuilder(py_ast_graphs.SCHEMA)\n",
        "converted_example = graph_bundle.convert_graph_with_edges(mdp_graph, encoded_edges, builder)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "46zkAgoewvRG",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "c682a375-e459-46b9-fb9e-77709b36f98d"
      },
      "source": [
        "# Use `summarize_tree` to replace large arrays with string summaries.\n",
        "pprint(summarize_tree(converted_example))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "GraphBundle(\n",
            "    automaton_graph=EncodedGraph(\n",
            "                        initial_to_in_tagged=SparseCoordOperator(\n",
            "                                                 input_indices='int32(271, 1) [3, 552] nz:1.0',\n",
            "                                                 output_indices='int32(271, 2) [0, 223] nz:0.99',\n",
            "                                                 values='float32(271,) 0.97 \u00b10.13 [0.2, 1.0]'),\n",
            "                        initial_to_special='int32(89,) [1, 153] nz:1.0',\n",
            "                        in_tagged_to_in_tagged=SparseCoordOperator(\n",
            "                                                   input_indices='int32(896, 1) [0, 548] nz:1.0',\n",
            "                                                   output_indices='int32(896, 2) [0, 223] nz:1.0',\n",
            "                                                   values='float32(896,) 0.97 \u00b10.14 [0.2, 1.0]'),\n",
            "                        in_tagged_to_special='int32(224,) [0, 152] nz:1.0',\n",
            "                        in_tagged_node_indices='int32(224,) [0, 88] nz:1.0'),\n",
            "    graph_metadata=EncodedGraphMetadata(num_nodes=89, num_input_tagged_nodes=224),\n",
            "    node_types='int32(89,) [0, 38] nz:0.99',\n",
            "    edges=SparseCoordOperator(\n",
            "              input_indices='int32(312, 1) [0, 27] nz:0.99',\n",
            "              output_indices='int32(312, 2) [0, 88] nz:0.99',\n",
            "              values='int32(312,) [1, 1] nz:1.0'))\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZNxbI8-cxsh8"
      },
      "source": [
        "This representation of the MDP graph can be fed into our JAX implementation of the GFSA layer.\n",
        "\n",
        "If desired, it can also be padded to a larger size (for instance, to allow batching graphs with different numbers of nodes). The `graph_metadata` field keeps track of the original size, so this doesn't lose any information."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "n9mQnBrXyG5X",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "35c890df-c6d2-4b0b-f7fe-41e29582f92a"
      },
      "source": [
        "padded_example = graph_bundle.pad_example(\n",
        "    converted_example,\n",
        "    config=graph_bundle.PaddingConfig(\n",
        "        static_max_metadata=automaton_builder.EncodedGraphMetadata(\n",
        "            num_nodes=256, num_input_tagged_nodes=512),\n",
        "        max_initial_transitions=1024,\n",
        "        max_in_tagged_transitions=2048,\n",
        "        max_edges=2048))\n",
        "pprint(summarize_tree(padded_example))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "GraphBundle(\n",
            "    automaton_graph=EncodedGraph(\n",
            "                        initial_to_in_tagged=SparseCoordOperator(\n",
            "                                                 input_indices='int32(1024, 1) [0, 552] nz:0.26',\n",
            "                                                 output_indices='int32(1024, 2) [0, 223] nz:0.26',\n",
            "                                                 values='float32(1024,) 0.26 \u00b10.44 [0.0, 1.0] nz:0.26'),\n",
            "                        initial_to_special='int32(256,) [0, 153] nz:0.35',\n",
            "                        in_tagged_to_in_tagged=SparseCoordOperator(\n",
            "                                                   input_indices='int32(2048, 1) [0, 548] nz:0.44',\n",
            "                                                   output_indices='int32(2048, 2) [0, 223] nz:0.44',\n",
            "                                                   values='float32(2048,) 0.42 \u00b10.49 [0.0, 1.0] nz:0.44'),\n",
            "                        in_tagged_to_special='int32(512,) [0, 152] nz:0.44',\n",
            "                        in_tagged_node_indices='int32(512,) [0, 88] nz:0.44'),\n",
            "    graph_metadata=EncodedGraphMetadata(num_nodes=89, num_input_tagged_nodes=224),\n",
            "    node_types='int32(256,) [0, 38] nz:0.34',\n",
            "    edges=SparseCoordOperator(\n",
            "              input_indices='int32(2048, 1) [0, 27] nz:0.15',\n",
            "              output_indices='int32(2048, 2) [0, 88] nz:0.15',\n",
            "              values='int32(2048,) [0, 1] nz:0.15'))\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "mi683R9wuin4"
      },
      "source": [
        "## Building a model in Colab\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "XhUvywFXu0-U"
      },
      "source": [
        "Now that we have data that can be passed to a model, we can work on the model itself.\n",
        "\n",
        "The core solver for the automaton Markov chain's absorbing distribution is implemented in [automaton_builder.py](https://github.com/google-research/google-research/blob/master/gfsa/automaton_builder.py). To make it easier to use, it has been wrapped in the `flax.deprecated.nn` API (note: it is not yet available for the new Linen API, but should be straightforward to adapt if needed).\n",
        "\n",
        "Let's build a simple model that just runs a single GFSA layer with a few specific hyperparameters.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hLoHKL7BiFCu"
      },
      "source": [
        "---\n",
        "\n",
        "*Note on variants:* Variants are an optional input to the GFSA layer, which allows dynamically changing the observations received by the agent depending on its start node and its current node. The `variant_weights` input chooses between a fixed number of extra observations that the agent can receive, and the automaton can then act in a different way conditioned on this information. (In appendix C.2 of the paper, $\\Gamma$ denotes the set of all variants, and each $\\gamma \\in \\Gamma$ is a specific variant index.)\n",
        "\n",
        "For this simple task, we do not really need to use any variants. However, the experiments in the paper use variants to tell the agent whether two identifier nodes have the same name (for the static analysis experiments) or to pass information from a graph neural network to the GFSA layer (for the variable misuse experiments).\n",
        "\n",
        "If you would like to see how enabling variants affect the policy parameters, you can set `USE_VARIANTS = True` below.\n",
        "\n",
        "---"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "zFrorD6NlKcy"
      },
      "source": [
        "USE_VARIANTS = False"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3Zoc8d51OLNu"
      },
      "source": [
        "padding_config = graph_bundle.PaddingConfig(\n",
        "    static_max_metadata=automaton_builder.EncodedGraphMetadata(\n",
        "        num_nodes=256, num_input_tagged_nodes=512),\n",
        "    max_initial_transitions=1024,\n",
        "    max_in_tagged_transitions=2048,\n",
        "    max_edges=2048)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "E7tmHndIOB06"
      },
      "source": [
        "@flax.deprecated.nn.module\n",
        "def simple_model(example: graph_bundle.GraphBundle):\n",
        "  if USE_VARIANTS:\n",
        "    # Compute the probability of receiving each variant observation. In this case, \n",
        "    # these are one-hot vectors that specify whether the start node and the\n",
        "    # current node are both identifiers with the same name.\n",
        "    variant_weights = edge_supervision_models.variants_from_edges(\n",
        "        example,\n",
        "        graph_metadata=padding_config.static_max_metadata,\n",
        "        variant_edge_type_indices=[EDGE_TYPES.index(\"EXTRA_SAME_IDENTIFIER\")],\n",
        "        num_edge_types=len(EDGE_TYPES))\n",
        "    \n",
        "    # Weights are indexed by (start node, current node, variant index).\n",
        "    # `variants_from_edges` sets variants based on whether or not an edge exists\n",
        "    # between the two nodes (and what type that edge has).\n",
        "    assert variant_weights.shape == (\n",
        "        padding_config.static_max_metadata.num_nodes,\n",
        "        padding_config.static_max_metadata.num_nodes,\n",
        "        2)\n",
        "  else:\n",
        "    # Don't use variants. In this case, the agent only observes the current\n",
        "    # node type and the in-edge type used to enter the node.\n",
        "    variant_weights = None\n",
        "\n",
        "  # Pass all of the information into our GFSA layer.\n",
        "  # The flax.deprecated.nn API encapsulates the parameters inside the\n",
        "  # automaton_layer.FiniteStateGraphAutomaton call, so they aren't passed as\n",
        "  # arguments. Instead, they will be initialized when the model is instantiated\n",
        "  # below.\n",
        "  absorbing_probs = automaton_layer.FiniteStateGraphAutomaton(\n",
        "      encoded_graph=example.automaton_graph,\n",
        "      variant_weights=variant_weights,\n",
        "      static_metadata=padding_config.static_max_metadata,\n",
        "      dynamic_metadata=example.graph_metadata,\n",
        "      # The builder, defind above, determines how the MDP is interpreted.\n",
        "      builder=builder,\n",
        "      # Increasing this produces multiple edges by running multiple layers in\n",
        "      # parallel.\n",
        "      num_out_edges=1,\n",
        "      # Whether to share parameters across parallel layers, if num_out_edges > 1\n",
        "      share_states_across_edges=True,\n",
        "      # Controls how many states the automaton has, not counting the initial state.\n",
        "      num_intermediate_states = 1,\n",
        "      # Configures how parameters are initialized.\n",
        "      legacy_initialize=False,\n",
        "      # Turns off the adjustment parameters described in Section 3.3\n",
        "      logit_scaling=\"none\",\n",
        "      # Controls \\epsilon_{bt-stop} described in Appendix C.2\n",
        "      backtrack_fails_prob=0.001,\n",
        "  ).squeeze(axis=0)\n",
        "\n",
        "  # Convert from probability space to logit space to make it easier to define\n",
        "  # the loss function; gracefully handles numerical stability issues by clipping\n",
        "  # gradients.\n",
        "  logits = model_util.safe_logit(absorbing_probs)\n",
        "  return logits\n"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hDZ4MiG8RbvL"
      },
      "source": [
        "Note that we could also have configure the `FiniteStateGraphAutomaton` layer with `gin`, which is how the standalone training scripts work."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "tf_Ce-GnSphn"
      },
      "source": [
        "Now we can initialize the model parameters:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UXXwzS7aNuan",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "0bbe63ee-035e-4d36-e336-bbb43681b89d"
      },
      "source": [
        "_, initial_params = simple_model.init(jax.random.PRNGKey(4321), padded_example)\n",
        "\n",
        "# Visualize the parameters of the model; Flax implicitly passes these into the\n",
        "# layer object when the model is run.\n",
        "pprint(summarize_tree(initial_params))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "{'FiniteStateGraphAutomaton_0':\n",
            "   {'edge_logits_entropy': {},\n",
            "    'log_routing_params_shared':\n",
            "      RoutingParams(\n",
            "          move='float32(1, 553, 2, 2) -2.4 \u00b10.94 [-5.8, -0.14]',\n",
            "          special='float32(1, 154, 2, 3) -4.3 \u00b10.77 [-6.6, -2.5]')}}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4dkqz9mxvLAQ"
      },
      "source": [
        "In particular, the tabular policy for the FSA-based agent is stored in a dataclass of type `RoutingParams`. We can visualize the entries of it below.\n",
        "\n",
        "Each row represents a different POMDP observation that the agent might receive, based on its current location and the last action it took. Within each row, the small dark 3x2 rectangles are the probabilities of taking special actions (add-edge-and-stop, backtrack, stop) in each of the two FSM states, and the large variable-sized rectangles are the probabilities of moving to some adjacent node with each possible next state. The \"checkerboard\" patterns reflect the initialization bias, which encourages the automaton to stay\n",
        "in the same state more often.\n",
        "\n",
        "(If you enabled variants, the two columns within each box represent the two \"variant\" observations. Since we set the variants using `EXTRA_SAME_IDENTIFIER`, the right column is used when the start node and current node are both variables with the same identifier, and the left column is used in every other case.)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 729
        },
        "id": "YiCbNQuDVmwy",
        "outputId": "7830f277-333a-43b9-80bd-008e6ff044ec"
      },
      "source": [
        "initial_log_routing_params = initial_params[\"FiniteStateGraphAutomaton_0\"][\"log_routing_params_shared\"]\n",
        "visualization.ndarrays.show_routing_params(\n",
        "    builder,\n",
        "    builder.routing_softmax(initial_log_routing_params),\n",
        "    rparams_are_logits=False,\n",
        "    row_split_ct=4,\n",
        "    figsize=(20, 10),\n",
        "    vmax=.5, # to enhance detail\n",
        "    colorbar=False)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 1440x720 with 4 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RA-esT0g9HfN"
      },
      "source": [
        "## Training the model"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xsESxzLUbLVu"
      },
      "source": [
        "To show how the model can be trained, this section includes a simplified training loop that runs in Colab. (See the \"Advanced usage\" for a more efficient way to train a model for practical use.)\n",
        "\n",
        "We can start by generating a dataset of programs:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "u3UmhJvJdf6p",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "95cac200-5331-4c1a-d714-1a78aea60fbf"
      },
      "source": [
        "rng = np.random.RandomState(42)\n",
        "examples = []\n",
        "while len(examples) < 500:\n",
        "  the_ast = tasks.make_ast(150, rng, python_numbers_control_flow.CFG_DISTRIBUTION)\n",
        "  generic_ast = py_ast_graphs.py_ast_to_generic(the_ast)\n",
        "  mdp_graph, id_conversion_map = generic_ast_graphs.ast_to_graph(generic_ast, ast_spec=py_ast_graphs.PY_AST_SPECS)\n",
        "  all_edges = (\n",
        "      graph_edge_util.compute_jumps_out_edges(the_ast, id_conversion_map)\n",
        "      + graph_edge_util.compute_same_identifier_edges(the_ast, id_conversion_map)\n",
        "  )\n",
        "  encoded_edges = graph_edge_util.encode_edges(all_edges, EDGE_TYPES)\n",
        "  converted_example = graph_bundle.convert_graph_with_edges(mdp_graph, encoded_edges, builder)\n",
        "  try:\n",
        "    padded_example = graph_bundle.pad_example(\n",
        "      converted_example,\n",
        "      config=padding_config)\n",
        "    examples.append((the_ast, padded_example))\n",
        "  except ValueError:\n",
        "    pass\n",
        "  if len(examples) % 100 == 0:\n",
        "    print(len(examples))\n",
        "    sys.stdout.flush()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "100\n",
            "200\n",
            "300\n",
            "400\n",
            "500\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fy695FHfsURN"
      },
      "source": [
        "Now we set up our loss function and data iterator:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "orxdnhmIfgx0"
      },
      "source": [
        "def loss_fn(model, example, unused_metadata):\n",
        "  \"\"\"Compute cross-entropy loss between model output logits and target edges.\"\"\"\n",
        "  del unused_metadata\n",
        "  unused_rng = jax.random.PRNGKey(0)  # For compatibility with stochastic baselines\n",
        "  loss, metrics_dict = train_edge_supervision_lib.loss_fn(\n",
        "      *train_edge_supervision_lib.extract_outputs_and_targets(\n",
        "          model=model,\n",
        "          padded_example_and_rng=(example, unused_rng),\n",
        "          target_edge_index=EDGE_TYPES.index(\"EXTRA_JUMPS_OUT_OF\"),\n",
        "          num_edge_types=len(EDGE_TYPES)))\n",
        "  return  loss, metrics_dict"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ydbrtxcPleyJ"
      },
      "source": [
        "def data_iterator():\n",
        "  rng = np.random.RandomState(1234)\n",
        "  for epoch in itertools.count():\n",
        "    shuffled_examples = list(enumerate(examples))\n",
        "    rng.shuffle(shuffled_examples)\n",
        "    for example_id, (_, padded_example) in shuffled_examples:\n",
        "      yield train_util.ExampleWithMetadata(\n",
        "          example=padded_example, epoch=epoch, example_id=example_id)\n",
        "\n",
        "def batch_iterator():\n",
        "  it = data_iterator()\n",
        "  ldc = jax.local_device_count()\n",
        "  it = data_loading.batch(it, (ldc, 32 // ldc))\n",
        "  return it"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DUz1kLhNo1Tm",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "da417146-212e-40ca-9ceb-33fd470cac7e"
      },
      "source": [
        "pprint(summarize_tree(next(batch_iterator())))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "ExampleWithMetadata(\n",
            "    epoch='int64(8, 4) [0, 0] nz:0.0',\n",
            "    example_id='int64(8, 4) [7, 479] nz:1.0',\n",
            "    example=GraphBundle(\n",
            "                automaton_graph=EncodedGraph(\n",
            "                                    initial_to_in_tagged=SparseCoordOperator(\n",
            "                                                             input_indices='int32(8, 4, 1024, 1) [0, 552] nz:0.51',\n",
            "                                                             output_indices='int32(8, 4, 1024, 2) [0, 497] nz:0.5',\n",
            "                                                             values='float32(8, 4, 1024) 0.49 \u00b10.49 [0.0, 1.0] nz:0.51'),\n",
            "                                    initial_to_special='int32(8, 4, 256) [0, 153] nz:0.75',\n",
            "                                    in_tagged_to_in_tagged=SparseCoordOperator(\n",
            "                                                               input_indices='int32(8, 4, 2048, 1) [0, 548] nz:0.81',\n",
            "                                                               output_indices='int32(8, 4, 2048, 2) [0, 497] nz:0.81',\n",
            "                                                               values='float32(8, 4, 2048) 0.78 \u00b10.4 [0.0, 1.0] nz:0.81'),\n",
            "                                    in_tagged_to_special='int32(8, 4, 512) [0, 152] nz:0.88',\n",
            "                                    in_tagged_node_indices='int32(8, 4, 512) [0, 202] nz:0.88'),\n",
            "                graph_metadata=EncodedGraphMetadata(\n",
            "                                   num_nodes='int64(8, 4) [181, 203] nz:1.0',\n",
            "                                   num_input_tagged_nodes='int64(8, 4) [407, 498] nz:1.0'),\n",
            "                node_types='int32(8, 4, 256) [0, 38] nz:0.74',\n",
            "                edges=SparseCoordOperator(\n",
            "                          input_indices='int32(8, 4, 2048, 1) [0, 1] nz:0.16',\n",
            "                          output_indices='int32(8, 4, 2048, 2) [0, 202] nz:0.16',\n",
            "                          values='int32(8, 4, 2048) [0, 1] nz:0.16')),\n",
            "    mask='bool(8, 4) T:1.0',\n",
            "    static_metadata=None)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WiilnoFBsZ3e"
      },
      "source": [
        "Now we can construct an optimizer:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2yVwG6Y8sKJl"
      },
      "source": [
        "initial_optimizer = flax.optim.Adam().create(flax.deprecated.nn.Model(simple_model, initial_params))"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gIyise0__6WP"
      },
      "source": [
        "And do a bit of training:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lDjFfyijF5q1"
      },
      "source": [
        "run_name = datetime.datetime.now().strftime('%y_%m_%d__%H_%M_%S')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0D7kVc6D_8Tw",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "0bf87d30-176d-44d7-dc8d-696ddb153a54"
      },
      "source": [
        "# Takes about 10 to 15 minutes on a TPU.\n",
        "# If you prefer, you can skip this step and load precomputed weights in the next cell.\n",
        "trained_optimizer = simple_runner.training_loop(\n",
        "    optimizer=initial_optimizer,\n",
        "    train_iterator=batch_iterator(),\n",
        "    loss_fn=loss_fn,\n",
        "    validation_fn=None,\n",
        "    max_iterations=3_000,\n",
        "    learning_rate_schedule=learning_rate_schedules.ConstantLearningRateSchedule(0.01),\n",
        "    artifacts_dir=f\"/tmp/artifacts_{run_name}\",\n",
        "    steps_per_save=200,\n",
        ")"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:absl:Setting up training loop.\n",
            "INFO:absl:Peeking at dataset format...\n",
            "INFO:absl:Starting main training loop.\n",
            "INFO:absl:200: loss: 19.377723693847656 avg_per_non_target: 0.00021761865355074406 avg_per_target: 2.2486281394958496 batch_clf_thresh_at_0.1/f1: 0.40355727076530457 batch_clf_thresh_at_0.1/precision: 0.29276591539382935 batch_clf_thresh_at_0.1/recall: 0.6156994104385376 effective_p_model_given_nontarget: 0.00021898560225963593 effective_p_model_given_target: 0.11125928163528442 elapsed_hours: 0.009833792514271206 epoch: 12 gradient_global_norm: 1.7030329704284668 learning_rate: 0.01 positive_per_negative: 0.0001304901234107092 step: 200 worst: 2.693657875061035\n",
            "INFO:absl:Saving a checkpoint at 200\n",
            "INFO:absl:400: loss: 5.795314788818359 avg_per_non_target: 7.953135354910046e-05 avg_per_target: 0.5528256893157959 batch_clf_thresh_at_0.1/f1: 0.7735148668289185 batch_clf_thresh_at_0.1/precision: 0.65949946641922 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 8.090212941169739e-05 effective_p_model_given_target: 0.587834358215332 elapsed_hours: 0.019207057820426095 epoch: 25 gradient_global_norm: 0.7654008269309998 learning_rate: 0.01 positive_per_negative: 0.00012342461559455842 seconds_per_step: 0.16871878027915954 step: 400 worst: 0.7844127416610718\n",
            "INFO:absl:Saving a checkpoint at 400\n",
            "INFO:absl:600: loss: 1.3853754997253418 avg_per_non_target: 2.3435932234860957e-05 avg_per_target: 0.11455842852592468 batch_clf_thresh_at_0.1/f1: 0.9865643978118896 batch_clf_thresh_at_0.1/precision: 0.9755208492279053 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 2.4924054741859436e-05 effective_p_model_given_target: 0.892683744430542 elapsed_hours: 0.028151852223608227 epoch: 38 gradient_global_norm: 0.27504831552505493 learning_rate: 0.01 positive_per_negative: 0.00012362848792690784 seconds_per_step: 0.16100628972053527 step: 600 worst: 0.17014822363853455\n",
            "INFO:absl:Saving a checkpoint at 600\n",
            "INFO:absl:800: loss: 0.6699908971786499 avg_per_non_target: 1.2433583833626471e-05 avg_per_target: 0.04683126509189606 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 1.3738870620727539e-05 effective_p_model_given_target: 0.9543433785438538 elapsed_hours: 0.037277566923035514 epoch: 51 gradient_global_norm: 0.13815997540950775 learning_rate: 0.01 positive_per_negative: 0.00012166185479145497 seconds_per_step: 0.16426286339759827 step: 800 worst: 0.06643061339855194\n",
            "INFO:absl:Saving a checkpoint at 800\n",
            "INFO:absl:1000: loss: 0.4604664444923401 avg_per_non_target: 7.983658179000486e-06 avg_per_target: 0.027946151793003082 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 9.484589099884033e-06 effective_p_model_given_target: 0.972494900226593 elapsed_hours: 0.04654399693012237 epoch: 63 gradient_global_norm: 0.09773273020982742 learning_rate: 0.01 positive_per_negative: 0.0001405532384524122 seconds_per_step: 0.1667957365512848 step: 1000 worst: 0.04434922710061073\n",
            "INFO:absl:Saving a checkpoint at 1000\n",
            "INFO:absl:1200: loss: 0.29468247294425964 avg_per_non_target: 5.69584744880558e-06 avg_per_target: 0.018984615802764893 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 7.295981049537659e-06 effective_p_model_given_target: 0.981222927570343 elapsed_hours: 0.05560751822259691 epoch: 76 gradient_global_norm: 0.06535814702510834 learning_rate: 0.01 positive_per_negative: 0.000107972628029529 seconds_per_step: 0.16314337015151978 step: 1200 worst: 0.027228930965065956\n",
            "INFO:absl:Saving a checkpoint at 1200\n",
            "INFO:absl:1400: loss: 0.2343970537185669 avg_per_non_target: 4.313907538744388e-06 avg_per_target: 0.012400067411363125 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 5.969777703285217e-06 effective_p_model_given_target: 0.9876830577850342 elapsed_hours: 0.06473897424009112 epoch: 89 gradient_global_norm: 0.052110783755779266 learning_rate: 0.01 positive_per_negative: 0.0001521498488727957 seconds_per_step: 0.16436620354652404 step: 1400 worst: 0.01986014097929001\n",
            "INFO:absl:Saving a checkpoint at 1400\n",
            "INFO:absl:1600: loss: 0.17968504130840302 avg_per_non_target: 3.3588257792871445e-06 avg_per_target: 0.010300396010279655 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 5.058944225311279e-06 effective_p_model_given_target: 0.9897605180740356 elapsed_hours: 0.07402368505795796 epoch: 102 gradient_global_norm: 0.04094467684626579 learning_rate: 0.01 positive_per_negative: 0.00013812952965963632 seconds_per_step: 0.16712479114532472 step: 1600 worst: 0.016302866861224174\n",
            "INFO:absl:Saving a checkpoint at 1600\n",
            "INFO:absl:1800: loss: 0.12899067997932434 avg_per_non_target: 2.4813391519273864e-06 avg_per_target: 0.007430391386151314 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 4.213303327560425e-06 effective_p_model_given_target: 0.9926003217697144 elapsed_hours: 0.08313697311613295 epoch: 115 gradient_global_norm: 0.02997024543583393 learning_rate: 0.01 positive_per_negative: 0.00012066987983416766 seconds_per_step: 0.1640391767024994 step: 1800 worst: 0.011770209297537804\n",
            "INFO:absl:Saving a checkpoint at 1800\n",
            "INFO:absl:2000: loss: 0.10818523168563843 avg_per_non_target: 2.0723803118016804e-06 avg_per_target: 0.00690688518807292 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 3.822147846221924e-06 effective_p_model_given_target: 0.9931188821792603 elapsed_hours: 0.09223447653982375 epoch: 127 gradient_global_norm: 0.025862064212560654 learning_rate: 0.01 positive_per_negative: 0.00012165141379227862 seconds_per_step: 0.16375505328178405 step: 2000 worst: 0.010692710056900978\n",
            "INFO:absl:Saving a checkpoint at 2000\n",
            "INFO:absl:2200: loss: 0.09486329555511475 avg_per_non_target: 1.6884167735042865e-06 avg_per_target: 0.00620083836838603 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 3.4496188163757324e-06 effective_p_model_given_target: 0.9938190579414368 elapsed_hours: 0.1012620895438724 epoch: 140 gradient_global_norm: 0.021290918812155724 learning_rate: 0.01 positive_per_negative: 0.0001338127622148022 seconds_per_step: 0.16249702692031862 step: 2200 worst: 0.00906508881598711\n",
            "INFO:absl:Saving a checkpoint at 2200\n",
            "INFO:absl:2400: loss: 0.08048178255558014 avg_per_non_target: 1.4781015806875075e-06 avg_per_target: 0.005473007448017597 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 3.259629011154175e-06 effective_p_model_given_target: 0.9945425987243652 elapsed_hours: 0.11027509609858195 epoch: 153 gradient_global_norm: 0.018114732578396797 learning_rate: 0.01 positive_per_negative: 0.00012266272096894681 seconds_per_step: 0.16223411321640013 step: 2400 worst: 0.00795502308756113\n",
            "INFO:absl:Saving a checkpoint at 2400\n",
            "INFO:absl:2600: loss: 0.05905803292989731 avg_per_non_target: 1.228057612934208e-06 avg_per_target: 0.003271682420745492 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 3.032386302947998e-06 effective_p_model_given_target: 0.9967347383499146 elapsed_hours: 0.11931268877453274 epoch: 166 gradient_global_norm: 0.014629610814154148 learning_rate: 0.01 positive_per_negative: 0.0001021219213725999 seconds_per_step: 0.16267666697502137 step: 2600 worst: 0.005318102426826954\n",
            "INFO:absl:Saving a checkpoint at 2600\n",
            "INFO:absl:2800: loss: 0.04910304397344589 avg_per_non_target: 1.0667299648048356e-06 avg_per_target: 0.0021193567663431168 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 2.868473529815674e-06 effective_p_model_given_target: 0.9978830814361572 elapsed_hours: 0.12838497817516326 epoch: 179 gradient_global_norm: 0.012885957024991512 learning_rate: 0.01 positive_per_negative: 0.00011229085794184357 seconds_per_step: 0.16330119609832763 step: 2800 worst: 0.0038279499858617783\n",
            "INFO:absl:Saving a checkpoint at 2800\n",
            "INFO:absl:3000: loss: 0.049854353070259094 avg_per_non_target: 9.077161848836113e-07 avg_per_target: 0.003057182300835848 batch_clf_thresh_at_0.1/f1: 1.0 batch_clf_thresh_at_0.1/precision: 1.0 batch_clf_thresh_at_0.1/recall: 1.0 effective_p_model_given_nontarget: 2.723187208175659e-06 effective_p_model_given_target: 0.9969476461410522 elapsed_hours: 0.13739732556872897 epoch: 191 gradient_global_norm: 0.011399208568036556 learning_rate: 0.01 positive_per_negative: 0.00013453495921567082 seconds_per_step: 0.16222224950790406 step: 3000 worst: 0.004913375712931156\n",
            "INFO:absl:Saving a checkpoint at 3000\n",
            "INFO:absl:Training loop finished after 3000 steps.\n",
            "INFO:absl:Saving a checkpoint at 3000\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8B8s3xTQuhPE"
      },
      "source": [
        "# Set this to:\n",
        "# - \"last\" to load final trained weights\n",
        "# - \"precomputed\" to load precomputed weights (if you skipped the previous cell)\n",
        "# - a multiple of 200 to load a checkpoint from partway through training.\n",
        "load_what = \"last\"\n",
        "\n",
        "if load_what == \"last\":\n",
        "  trained_model = flax.jax_utils.unreplicate(trained_optimizer).target\n",
        "elif load_what == \"precomputed\":\n",
        "  checkpoint_optimizer, _ = simple_runner.load_from_checkpoint(initial_optimizer, \"./gfsa/notebooks/demo_checkpoint.msgpack\")\n",
        "  trained_model = checkpoint_optimizer.target\n",
        "else:\n",
        "  checkpoint_optimizer, _ = simple_runner.load_from_checkpoint(initial_optimizer, f\"/tmp/artifacts_{run_name}/checkpoints/current_at_{load_what}.msgpack\")\n",
        "  trained_model = checkpoint_optimizer.target"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "J6_AirIa9Juv"
      },
      "source": [
        "## Investigating the resulting policy"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "tOxlTAE14fqq"
      },
      "source": [
        "We can visualize the model weights, and see that the model has learned a policy for solving this simplified static analysis task.\n",
        "\n",
        "Note that the leftmost pixel is only turned on for a small subset of rows, in particular `FunctionDef: body_in`, `For: parent_in`/`body_in`, and `While: body_in`. This is because the leftmost pixel corresponds to the \"add edge and stop\" action, and the only possible destinations for edges in this task are function definitions, for loops, and while loops.\n",
        "\n",
        "(If you enabled variants: Recall that the `EXTRA_SAME_IDENTIFIER` edge only connects identifiers, so the parameters in the second column are only used when the agent is at a `Name` node. As a consequence, only the rows for `Name` nodes have changed after training.)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 729
        },
        "id": "SgWnnpd94rBM",
        "outputId": "5657c9e0-495b-48f6-bc90-c2aa0062718a"
      },
      "source": [
        "trained_log_routing_params = trained_model.params[\"FiniteStateGraphAutomaton_0\"][\"log_routing_params_shared\"]\n",
        "visualization.ndarrays.show_routing_params(\n",
        "    builder,\n",
        "    builder.routing_softmax(trained_log_routing_params),\n",
        "    rparams_are_logits=False,\n",
        "    row_split_ct=4,\n",
        "    figsize=(20, 10),\n",
        "    colorbar=False)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 1440x720 with 4 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "9w7CghFk73Yz"
      },
      "source": [
        "Let's write our own custom Python function to see how it works:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jbECagHKKfHL"
      },
      "source": [
        "the_ast = gast.parse(\"\"\"\n",
        "def test_function(foo):\n",
        "  for x in foo:\n",
        "    if x:\n",
        "      return True\n",
        "    else:\n",
        "      continue\n",
        "  \n",
        "  while False:\n",
        "    while True:\n",
        "      break\n",
        "    continue\n",
        "  \n",
        "  return\n",
        "\"\"\")\n",
        "\n",
        "generic_ast = py_ast_graphs.py_ast_to_generic(the_ast)\n",
        "mdp_graph, id_conversion_map = generic_ast_graphs.ast_to_graph(generic_ast, ast_spec=py_ast_graphs.PY_AST_SPECS)\n",
        "all_edges = (\n",
        "    graph_edge_util.compute_jumps_out_edges(the_ast, id_conversion_map)\n",
        "    + graph_edge_util.compute_same_identifier_edges(the_ast, id_conversion_map)\n",
        ")\n",
        "encoded_edges = graph_edge_util.encode_edges(all_edges, EDGE_TYPES)\n",
        "converted_example = graph_bundle.convert_graph_with_edges(mdp_graph, encoded_edges, builder)\n",
        "\n",
        "test_example = graph_bundle.pad_example(\n",
        "    converted_example,\n",
        "    config=padding_config)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "zukEWF9mX3xU"
      },
      "source": [
        "def get_short_name(long_name):\n",
        "  \"\"\"Helper function to get a short name for an AST's MDP graph node.\"\"\"\n",
        "  path, nodetype = long_name.split(\"__\")\n",
        "  path_parts = path.split(\"_\")\n",
        "  levels = []\n",
        "  for part in path_parts:\n",
        "    if all(c in '0123456789' for c in part):\n",
        "      levels[-1] = levels[-1] + \"[\" + part + \"]\"\n",
        "    else:\n",
        "      levels.append(part)\n",
        "  last = levels[-1]\n",
        "  num_rest = len(levels) - 1\n",
        "  return \"|\"*num_rest + last + \": \" + nodetype"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jvbeA0SRZ9JJ"
      },
      "source": [
        "# Generate short summary names for each node, so we can visualize it easily\n",
        "short_names = [f\"{i:2d} \" + get_short_name(k) for i, k in enumerate(mdp_graph.keys())]\n",
        "maxlen = max(len(n) for n in short_names)\n",
        "padded_names = [n + \" \" * (maxlen - len(n)) for n in short_names]"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qGk-lrQsbpWm"
      },
      "source": [
        "We can run the model on this example:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GNAV5Oq-LdGk"
      },
      "source": [
        "model_output = jax.nn.sigmoid(trained_model(test_example))\n",
        "target_output = edge_supervision_models.ground_truth_adjacency(\n",
        "    example=test_example,\n",
        "    graph_metadata=padding_config.static_max_metadata,\n",
        "    target_edge_type=\"EXTRA_JUMPS_OUT_OF\",\n",
        "    all_edge_types=EDGE_TYPES)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "D0u9JEGKSEZj"
      },
      "source": [
        "Visualizing the model on our example, we can see that the model outputs match the ground-truth targets.\n",
        "\n",
        "In this figure, the targets are on the left, and the model output is on the right. The Y axis indicates the location of the source node, and the X axis corresponds to the location of the target node."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 867
        },
        "id": "naiB3uzfRhpe",
        "outputId": "e0d0fb27-bc17-48dd-9ad9-e3c862407288"
      },
      "source": [
        "num_nodes = test_example.graph_metadata.num_nodes\n",
        "visualization.ndarrays.ndshow(\n",
        "    jnp.stack([target_output, model_output])[:, :num_nodes, :num_nodes],\n",
        "    \"crc\",\n",
        "    figsize=(20,10),\n",
        "    names={1:padded_names, 2:padded_names},\n",
        "    ticks=True)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<matplotlib.axes._subplots.AxesSubplot at 0x7f79057c3208>,\n",
              " <matplotlib.image.AxesImage at 0x7f7905771e80>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 44
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 1440x720 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rXcnpiBLSn6O"
      },
      "source": [
        "We can compare this to the output of an untrained model:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 867
        },
        "id": "Bo-DlONTS6Az",
        "outputId": "7e93bfed-8f08-4efb-f373-f81641f02800"
      },
      "source": [
        "untrained_output = jax.nn.sigmoid(initial_optimizer.target(test_example))\n",
        "visualization.ndarrays.ndshow(\n",
        "    jnp.stack([target_output, untrained_output])[:, :num_nodes, :num_nodes],\n",
        "    \"crc\",\n",
        "    figsize=(20,10),\n",
        "    names={1:padded_names, 2:padded_names},\n",
        "    ticks=True)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<matplotlib.axes._subplots.AxesSubplot at 0x7f790562eb70>,\n",
              " <matplotlib.image.AxesImage at 0x7f7905625a20>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 45
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 1440x720 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OEfmLS8GS0tm"
      },
      "source": [
        "To get a better sense of *how* the learned policy works, we can simulate each step of the automaton individually, and visualize a heatmap of the location of the automaton at each timestep."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "eyfO1gvHWgQi"
      },
      "source": [
        "def unroll_automaton(routing_param_logits: automaton_builder.RoutingParams, example: graph_bundle.GraphBundle, initial_node_index:int, rollout_steps: int):\n",
        "  # Variants are the same as in model definition\n",
        "  variant_weights = edge_supervision_models.variants_from_edges(\n",
        "      example,\n",
        "      graph_metadata=padding_config.static_max_metadata,\n",
        "      variant_edge_type_indices=[EDGE_TYPES.index(\"EXTRA_SAME_IDENTIFIER\")],\n",
        "      num_edge_types=len(EDGE_TYPES))\n",
        "\n",
        "  # Build the transition matrix for the combination of MDP and policy\n",
        "  transition_matrix = builder.build_transition_matrix(\n",
        "        builder.routing_softmax(routing_param_logits),\n",
        "        example.automaton_graph,\n",
        "        padding_config.static_max_metadata)\n",
        "\n",
        "  initial_state = 0\n",
        "\n",
        "  # Unroll\n",
        "  unrolled = automaton_builder.unroll_chain_steps(\n",
        "      builder=builder,\n",
        "      transition_matrix=transition_matrix,\n",
        "      variant_weights=variant_weights[initial_node_index],\n",
        "      start_machine_state=(jnp.arange(2) == initial_state),\n",
        "      node_index=initial_node_index,\n",
        "      steps=rollout_steps)\n",
        "\n",
        "  # Reformat for easier analysis\n",
        "  aggregated = automaton_builder.aggregate_unrolled_per_node(\n",
        "      unrolled,\n",
        "      node_index=initial_node_index,\n",
        "      initial_state=initial_state,\n",
        "      transition_matrix=transition_matrix,\n",
        "      graph_metadata=padding_config.static_max_metadata)\n",
        "\n",
        "  return aggregated"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ey4sX3y9gl8B"
      },
      "source": [
        "state_colors_dict = {\n",
        "  \"State A\":            mpl.colors.to_rgb(\"#4e79a7\"),\n",
        "  \"State B\":            mpl.colors.to_rgb(\"#edc948\"),\n",
        "  \"\u2713 Add edge and stop\":  mpl.colors.to_rgb(\"#59a14f\"),\n",
        "  \"\u2190 Backtrack\":          mpl.colors.to_rgb(\"#b07aa1\"),\n",
        "  \"\u2717 Stop\":               mpl.colors.to_rgb(\"#e15759\"),\n",
        "}\n",
        "state_symbols = \"AB\u2713\u2190\u2717\"\n",
        "state_colors = list(state_colors_dict.values())\n",
        "legend_items = [\n",
        "  mpl.patches.Patch(color=c, label=l)\n",
        "  for l,c in state_colors_dict.items()\n",
        "]\n",
        "\n",
        "def show_automaton_steps(steps, ax):\n",
        "  steps = np.array(steps)\n",
        "  ax.imshow(np.einsum(\"sni,ic->nsc\", steps[:, :num_nodes, :], state_colors))\n",
        "  ax.set_yticks(np.arange(num_nodes))\n",
        "  ax.set_yticklabels(labels=padded_names, family=\"monospace\")\n",
        "  ax.set_xlabel(\"Step number\")\n",
        "\n",
        "  for step in range(steps.shape[0]):\n",
        "    for node in range(num_nodes):\n",
        "      for i, sym in enumerate(state_symbols):\n",
        "        d = np.sum(steps[step, node]) + 1e-3\n",
        "        v = steps[step, node, i] / d\n",
        "        if v > 0.05 and d > 0.05:\n",
        "          ax.text(step, node, sym, c=\"black\", alpha=v, verticalalignment=\"center\", horizontalalignment=\"center\")"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "JC6u2MIpnAGY"
      },
      "source": [
        "At initialization time, the untrained policy behaves like a random walk and does not do any particular action with high probability (leading to \"blurry\" output colors):"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 625
        },
        "id": "4lh8-YGcnM8l",
        "outputId": "e903880b-61a9-4fb3-c4a5-8986e10fefa3"
      },
      "source": [
        "starting_positions = [8, 14, 15, 17, 20, 25, 27, 29]\n",
        "_, ax = plt.subplots(2, 4, figsize=(40, 12))\n",
        "for i in range(8):\n",
        "  r, c = np.unravel_index(i, (2, 4))\n",
        "  starting_position = starting_positions[i]\n",
        "\n",
        "  steps = unroll_automaton(initial_log_routing_params, test_example, initial_node_index=starting_position, rollout_steps=16)\n",
        "  ax[r, c].set_title(f\"Starting from node {starting_position}\")\n",
        "  show_automaton_steps(steps, ax[r, c])\n",
        "\n",
        "  if i == 0:\n",
        "    ax[r, c].legend(handles=legend_items, loc=\"lower right\")"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAACIwAAALJCAMAAADr19q/AAACT1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQADAwIFBAPLy8sGBgQHBwUJBwYNCwkKCQcSEA0QDgsNDQoQDwwKCggYFRAWEg8MCQgUFA8SEg4LCwgUEg4PDQoYFxIaGRMYExAaFRIWFA8dGBROeacUEA0WFBESDwwpJR0fGxUOEA4cHBcrKB+3t7cVFxAvMSskHxoXGhIhGxchHRciIBkZGhUcGhQXGhkcHhYkJiQTFBIoIhslIxsqKyMeIRohIx09LygmJyAeISA/NCw+Qz1WSjsbHh5FPzJITUgzNS8VFhUvLiVDOS8vKyA2PTpngYsfJCRXUD80LyMmJhxZoU+weqHhV1ntyUg7OSpTRTg0KSNSVk49PjJKRjw1RU03MyhAQjRcfZc1ODIQGSIoLCpCR0ZoaGi8vLxZVkXExMReYFZIVVMvJR8JDhN7e3skMj5xh4k7Wnqvr68qOkeIiIgxSWKRkZEbJzGgoKCYmJinp6dTZmxYbXVOT01DaZJScIiygaTeYWPpyVSgvyPgAAAASXRSTlMAYIAg09A0wKDh9E3azRMWGZTVCasF3EBDtMTsb8qIMN8npgtRfZtKOncbI2QPkY7IKzx0/PhVRruu77blZ1JcHeiibFdiP4Wdz4kpYgABFOlJREFUeNrs3G1P2lAAxfEjIKVXhthyAS2KBQFF0YHFhwrbik/rvv8HGrUM56bLpom3tzu/REMMfeP5N7kBAoiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiBLv8wWe466KBv6NWQf9h1gQsSJKBGaUcKMt39/KY2ULT2VDiZd8PQHett6ZJaw9UBooKUhWzLAWP7ImIO0prSjjCSEOQdpTmtGVEGKcA73SwL+R9nnzt/Xkn9a7OFo86bXr9cc99MQ6SH9qCpKNUVBDpGPwMKI/tRVlZqA0UJlRzOiAXinvI+KOPeGjtyomGSAb3pqGGQqxH20aTov+BiBPnN3reFHDGwu3sHEl6q7hW2tA9HirfOwXm5hbXoKOGcwGwGfT6UTrHVSdSgmRfADA2QfpT0FBsUkNc1mrx8OI/tRVxMNIiijNKJL1sqBXGjiFXgmIj5K1IZrB3ny9WdvOhjL+a7g5+OKcY2r1SxfxejCOgIK/j3b1QNaFi4KTt43dz/LewNzyktvqYftyhqG4kydeHY2PfdltISKNNbk3aYP0p6ag5f2/uVfjYUR/aivK+L41BWlPaUaRjgF6Nbcw8TbXo51ixyfz9Q6Bx/VGQOUAxhSo/7zeDBgFAFoZFLrAtQUMfcwtL7m4BlxPdlpAe1yHVQfKnkTkVniiB0oDNQUt7v+9K/AwkgZKKxqW5X5wA9Keyowi1RXQW7gfWvF6ecPxx7N4uMf1DoHCPYo9wP15vXvgZhvATvfh8ZEBHHqYW15i9QA77Hd3AAR1COH7/riPubqTRz5ogtLh/Qta3P/t4iEPI2mhqqLYwSUoDVRmNBJ8uf+NrnPxetWGjePn1/v9KHm/PEq+tN7iKJlpAfa4juI+fji9BHB5CkqJdy9ocf83vSDwvYDv06bCu1bEw0haKcyoyw8fvYF72seXrS7OTQkEK8gHi/Vsz32y3tTqDy5+WU/uHsiacF9a76iYbVdmGIpR/CabkcX6GiJ3ThNN5xykPzUFQdqTcxuyXC5/mpQlSG9KK8JaCfkJX2DXn9qMYPv8/pE36FcmYtIdQF75Ds5MsbmxWA8Zx99/XO/h48cND0/Ww9DwrT28tB46E2dWAlYWHz8+LYrqPR5cV8UuXxhJBUUFmeFcFgDfpkkDtRW1HFFsgLSnNiPcmKB30uP/mlgQ/RtWREnEjHRl92T/4zGIWBD9LVZEScSMdGZvi6AwABELor/FiiiJmBERERERERERESkR6gKUXKEuQAkW6gKUXKEuQFyOWBElUKgLUHKFusBzzorFNbysYeOJggnpbGApl8UDd1XkoZtQF0g6VqQBJB4z0gCSjhVpAM+Qu+tfqniZWfplOat5l3u63ILB5Zb+t/ufFekASceMdICEY0U6wDNGm4DRRKx2Uckdo5HLrSD+XV8d51bLwM7Ocrmdzsn9xuI5B1almoWIVot/sLa9egJthLpAwrEiHSDpmJEOkHCsSAd4xll3etbqIVYTQwyy1XbJXI9//zhGFgrL5c4uN1c2Fs8p2sNvT5Zb37ZR0eS76KcfPoS6QMKxIh0g6ZiRDpBwrOg7O/fDlEQURQH8IPsQAvkPGZApmmGFlf2x0nIsa1rr+3+eqPtAd3yiouC9cH7NMNMuvGk8Z6fnul4LwskBZ8m1AGxlgfqqvAbuaX2orKUqcvZrFlhPJJdvO9d8CStiK6AcW2QBtGONLIBybJEFV9/TenSN5Pr9YXJbo+Raw+S6sCS2AsqxRRZAO9bIAijHFllw1dM+kly6sNnPleQViDaAxA/YPgCpipz197QOi7V2BqhvAaXcc6TLsCK2AsqxRRZAO9bIAijHFlmAkJNCIZ9IDp0o+jF8xctqqwxks8nk/Nmd6qdmGt8fV1wG6BVcGc9c9PoFrIitgHZskQFQjzUyANqxRQaA7i650xlicprFVoAUi60A6RVbAeJmhDS1aCp4/VsUWwHSK7YCxM0IaWrRVPD6tyi2AqRXbAVCXh1HGEktAXgAcXEgXSE/nLW7V40mm6kbXj8s/ClZ896TO73cAm5G2CIDoB5rZAC0Y4sMQEgvc/3kMmePKqejSWbq3j45sXz/yZ1ebgE3I2yRAVCPNTIA2rFFBiAofSG57WgX56fj5rvAUke+XvJL3PKpSWbqjllfdKrRmn+/X0c8qBS25bhPLt2sV3fkiJ/6O8NxddyMsEVzMfRQGdZIP6jHFul3zeTifbT2zk/HbaxvolqSr5fM2pVPTTJTd8z64vMmSv79g7Mbg3VE3GvkynLcJ3e6USuk5YhM/eWdkVlgi+brmxFVWCP9oB5bpN81k3sHLHUS03FfHWUOMEwOkOQmm6k7Zn3xsZ7q+/f7s+L9v+2rHPfJrQPZLX/kYYs/ppkRtmi+rn9VWCP9oB5bpN/Nk/PTcZ8c7J4gcE9rgpm6Y9bPONcDGj8rK/79kpwclx7I8URyXT/bhpuRGWGL5uv6V4U10g/qsUX63eCeVi8xHRcr67XA0z6TzNQds75Io9j27z9/T0uSk+OyptzTkiPcjMwOWzRf178qrJF+UI8t0g8hleN3h/nk0z6/ol0kpuPi6TdIcjJr1yc3yUzdMeuLVlRNQd4vZ88nJ8dlzXTzU3XHv3Mqyf0O+DOSOHZ7v8fRf/2zRQZAPdbIAGjHFhmA8SS5oINVn5yQ5O6MrB8WpREQ+BdwM6IGW6QTbGGNdIIpbJFOCHjeqq7sY2h7+Sy//A4GOjWgWJDd4qcoD28vWgaQi5zLI6BT8yskpNru0VkQe1X3BgOyvsLkuBkJYovm6fpXhTWyAMqxRRYgoPQE6UMMPc365EZyRYTJyRudyLVd871rQGwf4Za4GdGCLbIA2rFGFkA5tsgCXKLdgJDM5PVbrgKsuveRK8sUlqXlZqVQAtbWkgHJj778BJfyI7eyIZ+SFWQSjJxNVYBWT1bru8/r7g1ujJsRrdgi7WABa6QdDGCLtEPY/kcEkkOq4sPx81qW3u6+3c2fPeHj72n1JTmZ4IL6F/RL8ilZQSbByNl/f++eyGryfNDUTT6ujpuRS7BF8zX0UBfWSD3oxxaph6By9GJ8cn5ey1Jq8OcI4sI2Uia4yI70fHLyy9dyVpKT1e4/Od4ZmQxbNGffjGjCGukH9dgi/RBSa+3jquS6GPifXCqcXCsj+V2WnJyVe1qymoHkuBkJYovm6vpXhTUyANqxRQYgpPsd45KLNobzXSS5wA/YZBKMJFf/gs2SfEpWkEkwo+RWCw1ZzUBy3IwEsUVzdf2rwhoZAO3YIgMQsPfOOVe+mFza5druGfCy2vLzXYbJZbPJ5GQSjGQjT/vIp2QFmQTjk2u7gxeQ1Qwkx81IEFs0T9e/KqyRBVCOLbIA4ySTWwzx3TodiUcWZRw8W6QfbGGNdIIpbJFOTI6bkSBe/4paNB32/hdhjZSCKWyRTggorji3lZgQI6/Tya9TgybxXVrkzQhbZAG0Y40sgHJskQUIaGyieBzYRk4nuVwRmsR3aZE3I2yRBdCONbIAyv1l7956moiiKACvOjMttgOWQjuZqmitCmi8gsQiKl6iDm1aQ2J48h/w/58FVii0OTMVGMLe7f4eanMcTg17kRx7WViKNIDb8+166uTiYP4bEL1f9l9iI4wbHu7V/BX+pmVyXMP39rDejuV0rKtjjR13ECHJ0ywfRixFGkABi5F4kM9SJB5c2n75O1In9wz1sIqo/AYvdhvt1p6H7Tbu8Dctk+MaTo71diynY10dj5Hc4eblXVc304cRS5ECEM9ipACksxQpALdWM/0YeSsIyg8QNcGul4ce3i8XXuCM6xpOjvV2LKdjXR0nxx1ESPI004cRS5ECUMBiJB7ksxSJhxSlYtrkouYS5ouI4rOp1H8szoPIcU0ZaHJyBZbTcZacHHcQIcnTjB9GLEXiQQOLkXRQwFIkHRyeLaD6pZo2uUqMN5ucCnbDpdaeBw8Ld/kCGzmuYYEdJ8dyOk6ONXbcQYQkT7N8GLEUaQDpLEYaQDhLkQZwWPP9WgFpk6vHtc5rTgXYCDuNKpq8fm4O5LiGBXacHMvpODnW2HEHEZI8zfJhxFKkAaSzGGkA4SxFGiCde3Kj2li4jWy8Ro0kF3vXRU8dvKVIA+hiMZIJqliKZLri5J76fgXZeI0aSQ7sMGIpUgK6WIxkgiqWIpkw0YNo5HbaJTmww4ilSAnoYjGSCapYimSCU3tnI+0YydsMpbACbIXHt29r/o136pYx1ArKRTuMXAdL0XT9/ItiMZIP4lmK5IPTSnyFyRWB+sM7uw0Ann/jnbplnFOyw8i1sBRN18+/KBYj+SCepUg+uLR+3XJPbnKDLr87b2O2v3ByeXTqZjwi8T53WK8tNzwuczeu89/mNZZr6+AKd8u9rs4OI5YiJSCexUgBSGcpUgAuHS9jctkNuvzubD39uPVolZPLp1M3/RGJ97mDx4+Bn+BuXAcnt9daCj2ucDd7ZuSqLEV4MUX/GRHFYqQApLMUKQCHygoyJ5fdoMvJAZwccuvUze7s5X3u8Il/e4K7cR2c3ENg7jFXEDXtZZocWIqm6plRSSxGGkA4S5EGcPjZCO9++eyY3OQGXcdzWvl06mY8YjEI1sD73IGT4zp34/rI5LgSxXYYyYGlaJp+/kWxGGkA4SxFGsDNfYyc3KDreLdPPp266Y9IvM8dzj+nxd24Diw/Pn1OiytTODlJLEXiQQGLkXiQz1Ik3oUnl92gy8kB38Owwsnl1Kmb8YjE+9xhvdZpjEwOXMdaGFS9Rqe2Dq5M4eQksRSJBwUsRuJBPkuReBeuq8tu0OXkiJPLoVP3Ml/re0jh+VP8OSixLEUyQReLkUxQxVIkE1w2g+AlTj0tuW85v8r68cLOuXbcztn9t34JKLxbQBzl2qnLr7XJyWYpUgDiWYwUgHSWIgUmt6o8mXPfcnKT21wK2984uUsLTtSRyrpzJbIUKQDxLEYKQDpLkQLZk+OEMm6/3l4E2ObCzhV2vfAdPlT4WkIcsd/lfBOMUIkWkM5SpADEsxgpAOksRQrAZXO++WPy5Hi7eHqMZOcKu15O3+HDKx614oj9LiNNMAKpr6uTxFKkAMSzGCkA6SxFCsCliuLO0kUnx84Vdr0AxCtWV+KI/S4jTTAyJVpAOkuRAhDPYqQApLMUKYAU91sXnRw7V/iJptHJ1e9/iNjvMmyCkSvRAgpYiqSDBhYj6aCApUg6OCwswdtpX2Ryfgtg5wpnM/IC2yJebUfsdxlpgpEp0QLCWYo0gHQWIw0gnKVIAzishX6wiv+ZnBfcvhusss2FnSuczegLbHiQROx3GWmCkSlxOBzqDf0Z6g8dDA1O/R7qDw2G+pe3B+EsRRpAOouRBhDOUqQBsmVPbholDoeHBwe/u3/GDiODQXfwd+ww0u91+/tjh5Fer9sbjB1Gjtf6030YsRRpAF0sRjJBFUuRTDa5/zuMHA76g/HDyJH98cPI4OiP/bHDSP/o8sH4YaTX7dphZKZSJBJ0sRj9Y+/8etqGoSh+WZIyukKhTSm01Whp1RVNYaPaOkT5M2loUmPLqSJVeer3/xpzdpKp8RIqIR7iyj+JANfyNfK5D0d2uSknpBWmisoJ5VGxG25xh5jqRZsk8qk0htuPm/fPavFz2rApy4HtOB8oh14Tbe+Ueuk652niOJ1zQ6C6rS2dijpr4FQrrzAjYs1VMyLWQjUjnIecq2aEBb5qRnzG/V03I6aKNIBKjykjDaCyY6pIAyiP2pTqRTayeO/UlxuC4o52xQO4ljurtShh/ET0FsqB/VeYkUBEYpU1I4KHPFLMCGPCF8o1je9zn2evaYTP2M6bEVNFGkClx5SRBlDZMVWkAbkuskOgQLmxfU3Us+09oquGe2rF/9f0rocdmZ7L7xfqm5Yh0L8XDlZPamOiY9nBboBWd2h7h5wYlcpRZ4LGdp5z14eNfGF10GvYHwmzMIowciKOv9M6dRtXaaR969rXW8zIahVEWTMinchSZM1IyETAeRhumpHA58opiPyRxYidNiOminSAyo4pIx2gkmOqSAcoh8f53PlVrNziB3Wm1unw6KBu1Zo3vtXqD6lRx47Mxg+zy0/Km5bTMy0vUW4xaR0ck/tAXj2VNFYKOTEa/375nDa2ez8jULw6uBtSnTBLjg78RDnkRDxRzh80a1YSaVdvyCtuVxebESEE4xkzsmYyxqOMGVkuGFevacTCl8Yjc00j2GL3zYipIh2gsmPKSAeo5Jgq0gHK4enup1f7XKjct9i2jaQm7tmjfPYt+vJUmVOqHFGiHMizkd//Ws1uiyQbyiEnRqEcGttllCtaHdy6ex5hFkYRRk7EE+X6MusoibQ7265pgjA2JKtNMxLx1WqtmhFfug8eZMwI97kQTGSuadiCC874TpsRU0U6QGXHlJEOUMkxVaQDlMPZV+z+duVG2J2L+fUzKWdahcp1KtCvSDmM4kwLje0U5fJXrzjOhKj1++SQMAvKIY6ciGeUQ6R9vs2M8GUUraJw04wEQRiGy2XGjHAuAhEoZoRxiWJGYvhumxFTRTpAZceUkQ5QyTFVpAOUg3d/1LIHL55pTaza0EtPlYgO+03l0z4FF2z3R81uqpz7QMM6Wt1BOeTEKD7tg8Z2GeWKVgcWHXUJszbPtJAzzeaO0jMtRKDcWzQ9C8P/m57FX2rTMyF2v+mZqSIdoLJjyugPe2fT4jQQxvH6Ujz4Liji68mT4EVUxJsvICqayfPMhJlOk/E2ge3BUxUFt7jIojms/QQeJJ48+AHWz2ZmJo5mDVtWt5Do/C4dUnazMH+6PzpP/+0Dg44TUtQHBm1cH564tM20z/163uaemai5aSZqLt32I713zeegWg7Y3M7dOX98WO+cm/ZxVXeu9s79znrnzg5vXR7UxXZ+57a5u+PM/hN76p+yzzZ2zl03dXzDY/tO3TTTPu5K+8598Dz2vPMwzzMP98x+oDXXjonn5zXl0S3w7Xg46DohRYt54Glc+1Me7pTO/xcJMfp7HuwuvYxRSNFSX4we7gY7Lz1r5dZpv3MWt3PLx9/ds/hTUu1/X7uMbH4pNrfIyKfy1fvPVkbIOCaIRkZmqyuz0soIQ8KklZGpWpmuGhnRkGfArYzoEdNPjYxoCZhzIyNcp0xbGQFASK2lpJJJbmUkBcxTbvi5AmAM+iAjIUVBRgaDEKMdxyjIyG+EFHX7xag7MnLkkLPFm/sP+kqX/QcGy8fffWkysvH147etMvKy3HAyQhISEysj65OZsRHOEVmWpU5GlJpaGckZIHInI1qOrIwAk4hGRrQCifyHjGBey0jKpJERwBSRGwBlvcoRMEv/PRn5R1MUZCTEKMhItwgp6o+M3BgOh9cuttfVuf1zBXO+bM7TWlG3SwwtJwdLpikj82/zLTLyfv3tei0jCYkiamWkeF04GckIjIm0MjKaSGVlBAnQzMqIBE21PabJsjxhVkY4A2IeNUNGBegKQKA0NTKCJKck5by5QkKh+zISUhRkJMSoC0XeDxz/s4yEFPVVRiqOHVpQ5L+ghc4/2TsaMvLx67f5ZlNGyrWNF05Goih5nNiZkWkxk2/sMQ0RNGb2mGa0otjEyggRKMAc0ygAoOaYhkOWEWKPaYBhxpSREpqxGLWBZiBY9WjcBglyg1+lVFTrfhzThBQFGQkxCjLSCUKK+ioj5y4s2DlXMOfK5lzp294Dp44fOtoybuyq5VwlXPdpyEi5+eHLRlNGqrdFns2NjNAoiR8/obSSkVdvXk+KsnzGZURILBhUMsKm05FcXdU6jc15DsDkqaIAwNREpygSQQlopRlSQhlXGpJMRIIxrVOBJCIgNYdYiJgg47+s8ljEEcmwDzISUhRkJMQoyEgnCCnqq4wcvrj4Kw6P15tT18PtvXrl6pWDv1fUuWq5uhKu49R1dV5GXrws52sNGfn8am1tvfhsZOTRkyiJzABruVIUhTTHNPAkHhNiZ0bGUo6keWckjQSxxzTPeYIA7PlEcxoRRORaKTqmjEqldBrHAomdW42T6ppZQBSPM+QV1Uq4VV6tKOvHzEhIUZCREKPv7J1LixQxEICzPlFH8cE6zME3KIriW3wcFD21E9JJeroH23ZGL8sI7cGTDjaosIdF9uBP8ODqSURExIv406xUjXFW23FFhMTJ57JbVsJeqpCPJFP+RRsFGQld5MU/Rv9SRvZtZ39QORr6tmoG/lxmFlq0c19gJJwXjMvIm3d4OjIuIy/nnz17PXxuZCSWaYpvRh5Vj+B05DHISKZVkqQJyMi97N6TJ8UTkJGkm/Z6nR5c09zo3nl4J7kDb0Y6ce9GQTKSD+BR6wBkROmkl6KMqG7vRh9lRHWT5C7KiMpHUZbru5kfMhK6KMhIaKNwMuIEoYt8lZFVq/6ocvtNhJWb+XXlWswLxmXk3ZvPnz+/eTEuI/BRmufP778CGVFapakyMgKfpXn06OlTkJF+mgBGRhbNg9UHD0BGOp0CMDJSFOZxyO17JtczGBkpBga4puknRZH0IO51Eli7CTKC2wo4aFkWJUDhg4yELgoyEtooyIgThC7yVUYa+1ZWORo2R0PfqHI/X7DRaDkPK/e7oWedn4ee9SYOPXs4cejZjZUNPet5M/QsdFGQkdBGQUbcIHSRpzKybi37XeVowBwNm6Ohb1S5mhF1OFrOm8otzX1DWuYt0jKw5JbMYlN9S25Rlom5yTg/Dn6quyjyBeY8oY08gLlO6CIPYBOYULn/FyMj76MvVkaEMDIyHC52F36QkazsllWFMoIZIyMq16qPMoI5lBHI5YpkhHJoHBDADwRSJtaAzVmktzIyzV0U+QLzi9BGbsK8InSRm4TK1cjIp6UP8J1MhHOUkfmqrEYyIqTgRkbKTlqWBclILOOYZARkopNlKBsmZY5EtJJS9XPMiRhlREv4C4kH7JMkI1LbnNlqg5ooyIjbRL7A/CK0kZswrwhd5CasjtNrtmNx7Li6+qF1k8fV1a3OnN3CWk3mMkZG3n55izIiOOdtkpGFcpiSjHDICpSRW4lK8WRECgBPRnKpJMlILKQgGTFaolFGhIw5iYf5PSQeoDECc+g+GnNoPOgdHAMAfkob+SEj09xFkS8w5wlt5AHMdUIXeQCr4cjO2dm9qydpJH2fPJGubnXm4jXXKwcy8vHd3NJ7kBHBOXzhm5HFqhyWC0ZGuBBc4DWN6pY6M29G8AAlNm9GOlJ2pcJrGkEe0e8rGWsJP41GxCKGHLoIBEpZ74BcHMO6GssBYpmC6O+RBzIy1V0U+QJzndBGPsAcJ3SRD9RWbsOBA40tv6+cHVcH/3HytW8D6U43WjtX0wA7Wh1/jDxzdT1UjvbTeDva6QowIeYt3NK8n/v4AWSEt9v4TljCmLNycVhWC/NStCHZ5lwOKpmmXZ0UICOctyEl8qwvyDKyXLYhyYUECUF90cYicBss65gDQqpRTpgcnsLE47lcmpygCBaXRe7LyDR3UeQLzHVCG/kAc5zQRT5QfxR18eJR9gcaeYTNNrbSQLorOw/su76aBtjR6vhj5Jlt+/e1mrSfxtuNdrrD0twX/hYwJyPGOgSejFRpWaalORkxnmBygyruqlvaXNNgDk9GFJeSrmmkSYE7oIxIidc0+Msgp75FinKQQhmJZZwrzMWYw18iKOKcUhR58YB1mrso8gXmPKGNPIC5TugiD2A1bDl/bAtUYuWVW7V27cY9OJAO58HsXU0D7GrOtLYd2t1q0n4abzfa6Q5L5pZmztzTSMmvc0EyUlbzC0M4GYFcW8jYyEihs6rqFnhN05aAkZE47yudZhk5A8mIOQFBGYFtuaT3IRysQueKcnRNI7jWo6sbTrlxBRHfI09kZKq7KPIF5jqhjXyAOU7oIh9gNZw7yNj+QyuuHJRsB9u8jjVbtnI0wK6ucrO7LjVpP32IG3a6xZLxEHw3IiWaCMnI4nC4MFych5wkBmWaJUmZGRkxRyAoI3mepqlSICMoDCgjWiswDJARm1MKIwgoR6F5CKJJRjTl7CKmbOTJR3unuosiX2CuE9rIB5jjhC7yAVbDqbWzOxr7VlI5Gle3qcVOnhlV7kpjB5xp0QA7Wl12wbaNHb/YpP1UudFOdxgfeiYmDj2rBgQKBpJ1aoaeqZqhZ/CFLMv9Z0PPprqLIl9grhPayAeY44Qu8gFWx+7G9sMrumCjcXWzre0XTmDlgNONCztHA+xodfkFG9sTNWk/VW600x2iGoaW65bS0rZIi00JS9vCLXW5/2aQd+giD2DO85W9M2t5GojC8BHbijsqiiKCGy5XbiC44IYoNiHjZ5LGoaWtk0oabEBFbZXggl4IeuGNf8HfqTPTRtNEE/ET58h5Lj4OHzS9OG/L0wl9SzFCAJgOpQgBUEHF5oocgi3rATG3CkgZSdOJlS7JSMCsO/6SjDi25TCSEUoRFgAXFCMzAVRQisxk1Td3pNHYCIi5VUDJyPOABQUZYSzIy4j+Li7JCKUIC4ALipGZACooRWYCZdxsbD5cWVen/248XqylQ1dRV0dGWOosycgdx3cKMmIxkhFKEfLXv1FQjBAApkMpQgCU0Nq3c8vFQ3U0sryWDl1FXQ0ZmQQpS/MywpzAXpYRq2236TYNpegWFsB0KEYYAMOhFGEASrh+BODk7lqbu7Z+W1Zap4rndGkdpoq6yro6JSNB+tGf5GXECSZ32JKMtG1mWSQjlCIsgOlQjDAAhkMpwgCUcKqx48r5y/U0cs22hUbq4jldWoesoq7GyYjDmO3kZMS3pGH4ORlxblkWyQilCPeHEaOgGGEADIdShAEo40zzwrlLv7s5XTwnS+vQVdRVy4jvfxMSlv4oI4Ezmfh2kJeRNrvNLIdkhFKEBDAeihECwHQoRQiAn3Cy9dubOygn+dVsdBV11TLCJmn6ceL/KCOMBUFw53ZORmwlHyQjlCIsAAYoRqYDCKAUmQ6UsQVubIL6m9O1dLp4Tm4OXUUdlZ79IZSi/+r1bxQUIwSA6VCKEABl7NnebNXa3Nrm+r3No7qWThfP6c0hq6ir2tynjBcZHzKeZbzKeLrgZcaDjCcZ92sSFrHBdChFP8PKaGeUGmoRJ6Pwv0pYEeN/VIBipFmVQNk1cX4X82NEKarITo7fDgVbDdp/1BDzP1IuI1++vPMfKRnpdYLeVMnIm9eTN4+UjIy6/vipkpFk6iZvlYzc5Z27MyUjw2Fn+FTJiOAdfk/JiBCxuC9lRAgei1AKh+CuCNXEecwXU8SFkhE1hRI1YZARShHJCFCMSEaMg1JkgozYtmXb3yeSkdoy8und8/daRrq9Xqpl5M3rN2+VjIyH3eE4UTKSJLNEychodHc0msvIveHwsZQRzgXvKxnhPOR9JSNhxD2hZEREwhVzGRExV1Ms3DiUMhLFIopDiZpIRsyGZGQOxYhkxDgoRWbIiN22FpNlFd+MTlxtAMDZTZs21qur2wA5GmsX0zp5BX2d09sbkGd9o9ncCEWKV6sk/6gDzQ2tvyQjHx+l85ORqf9Qy0jyaKplpNtL3NFTKSOz4eexlhHuzlwtI3d7SU/LiBsLTygZ6buhJ/TJSNxf0acgEfdiNUVR5A2EmgZ8EGkZGUSDWCgZWZGT0TJCKSIZoRjJGJGM/HMoRYbKSFvKSDaVyMixVgNg5/6tV3bV0Mhfbq71/TprC5vbApJV3px+3r8kI++ef3n+QcqI73eDoZKRZPo2faVkpNMZr9xTt2nGvZn7UsmIO+gP7ikZ6XfGnUTepgljL/ZCKSP33U7sqds0bux5kVIQ75uVcDmEXhzNp3gl9rgcQm/F83goUZPZJyOUIpKRr+yc+2vTUBTHo53iY76mDl/gdFPnDyqK7yeKirrS5ubRNOnjpulKDLXCZN2qDjepPww2QQb+B7K/03NysyNx7VpcwW7c7w/b4aS5gZwv47N7T4+0ETxXwsj/l3RRf8JICt2apKjVMQ2+5Rsn4Q2c7a5yF3E23ZmBgR2Kcnno2HACv+O08wy+QVoH16RmZKqcuIvG24HaryZ0ZmgAlsBRd9HVtbuODF4U+ahyieFjQ5dFhtbfzLg6hJHFqV+LKwAjNcut5cxaDWBk7vtScxZhpM5KpSKv12fm32cWvs7mms35epVNZnWj0fjyZYZnSzl9ul6tZFkQ6EAj05UyC3TdKEFgBJybvleBlG8w04PIYwF3WNHGiHPGISrbDmOM+z60jDAR9TOMSBdJGJE26oGNJIxIF23eRX0JIynYDAFnpv5ErWHk9sVHt89f6qpyr+8op24khkcP7j2UGDx6/U3i+MioMnQI3yCtg2tSMzLtaV0Rd0Xj7VDtVxO6P6ociobiwdVzbxJrd40f33tY5KPKvTl3dDARG5+32Z2Rz3PLy++WAUZm1UwmY9VgZ2TqHTSI5KcQRiw9n2d4TNM03y67+ffzACNaRtczuDNSd3Tb1uGYpmI7iCCV6nTVc4JiMQAqqXBm6Czc/HBMQ+eVMGI84GWIPI0ZRtgzAhGHCOSpEPV7z4h0kYQRaaM2NpI7IxtLuqgbF231nZHUBDwZ5nJR1BZGFKXLyt1EzBvbo8A7egw/RxLKtSe7Hwico3Va72mJu2Lj7dqtJnT32I4r0VC86KrQLYRVkY8qNwI+GYuNz9ssjCx+g92Rj1M/PrmF2qdaYRZgZH55aWlq7jvASIPBeYyJDawzmZ/vm7mfACMls1RtZBoAIw2jNjOdr8Mxje3gyUsJjmkmnUq1rFcQRkzoAvGQN7gBRzAQQMQ9Edks8GwfL/oiAvnMgGhLwIh0kYQRaaO4jeQxTUdJF3V00XY4ppl4nUwlJ5J/os7HNN1Xbky8zbMPrj5XYntaHSp3ktJtV9u9a9c4nNe9PHIgGoonKhfl9+HTRD5WORqf1wMYmVtZXf21uvID+ldzKICRhVqz2fz6FWDE1bOu65YARhoujBZZWAAYsXVIlUsAI29zDRTASFH3PC9bBhgBmkAhjPieBxHsghi2B2FFRCCIAt9DIcIEGOAnRdTfDazSRRJGpI1a2kjCSEdJF3V00XaAkaR4CkWtYIS6fbre0xpPDI5eWduFUpQDI0dj3T7tDtjEXbE32241oYRy8HQ0FC+2pxVWTuSh5mO0p0Xj8/7v0LMPNPSsQkPPqhsOPStTsFWHnkkXSRiRNlpnIwkj3Ui6aGMXbRMYSa2L/nbRkac3H+5XntP3oDp2+7yK+nNeYAfOPezAufCMWoDFOnTAFq9cdBe92farRTo1MLRDiUbd4dVY5aK8Mj6463Bi+B50+4hMjyuXJ6VJOVKBRB8zSTrJILXKZUgb5iaU/pV0USvvzJFUkksySS6Jqp4l+aQsqUjySDZpw1w/u0jaqMMfoxwpTXJJjERGMUhZkk6aJPkkm9QqR+pnG0kXtfLON9I7Uo30llQiueuV3YS89Ur2fkLMgxOicjE0/QfRaqQO35Jq97zewoiqJrXMXzBiWamCHsIItAanrRBGCla6oIcwoqaTqhXCiAU5HoKHpqawORVS8DkzgzlNS2smR/BwNNXB34ZhaXCngXHBUgs8hBHHUTWzv2FEuqgNjBSspJkPYSQJ/36kEEaYwdJFhJHQJwVmmhAz1ZwMYUTTUmAAhBGTaWYxhBFWAHuEMMKZxoohjDCIghBGOLe4j+DBDW4FPoLHb/bu5UWSIggDuIqLim9B8ageBA8KKgqKIHqcLjIjIl9T2ZUV0jSUBS3sTYQ5evDgH21EZPuYcXQ8KLRNp9Abft3upT9rf5tZWxsjxmXULLL8l5atEeXN08bIpUYPYaQUV6Y7GGnNp61hRC9GpBiREWfDiF13WDGCCDjvFSO1+sqGEW3RYhjRKRo8WKZgGOFjps2qq5mEufK6nDZGLi26HyM/3/iffzKMFNqUjpHpAIfvDSMx+TQZRnKk8K1hJCaKoykkc8l7xUgOsQTDRY41j79Ocd7rpBeZsU8Zo75r0zobRtZVJkWITNIiwci9T4jpr8f17jN/99q/v+ffMxfK9tNLL3Qtfvb0bxD96Gn55OuPvvriRf2X1x592OOHV//ZTuCb+yNGqJVS7mCkCTnQMGJBMYwkRDSMeCAAVIxQw1IMI0CFwDCizEialSIZGkZaRUKFBxESsGalYqHYMYJEfNIYubToLzCSUksHw4jePz4oRtI3IbWOEfAAZBjJnPlaMdJLoRjBmFMyjNSKtYZFM1457TtGuNWOEcnQMLIgUzxiZMVVM5ssW1fNThsjlxo9iJGEmO5iJOScDCPOg3eGkZhi2htGCCqgYMQyDIaRglRWwwhnxLFjhKVjihHEiNUwglUyw8iCXLljBGPl08bIpUV/gZHD4eaHjhHvqXSMTIdpaxhJsmLHSJZCdYxwPu7bRkEIG0aumdtsBAkccp+EFhwMHjotOkUOkXd9Wlin3U4mZMNIz3bDfU+I6a8PP67uNiZtq+pv1lMf2/f95X3vPbL1+hMnsB7CCFD27e7OSJtKMoy4oQwdI6IOiQ0jrjlvGPEl+44RD811jCRqjjUjQA9o8CCZOOeeEWtGhEDx1+zEMXJp0V/ujNxQPmLEXR0xkiYyjHhPzpeUdN427jsjVgXDCE6NO0aIoXWMYKhsGKmFPRpGECOxYWQl9LYLwiyCHS1DpmpZZK504jsjlxo9vDMy0Z8wkh633DHiaDCMtDTXZDsjANUfMZJCwVkxQsRQO0YwUDKMVGJ/xEiNoPCwDNAwcmyW9gmJTnxn5NKiv8BI+qkdMeLS0DFySN+nm44RaVY2jAhjMRhGEs4UpVk2lWwYmTHD/siNir9OBcc+rRU7QTDUeGva7RhXWg0jx2m4h2D2+k/3tOz16+fkb11+89EnTz96pT+X5aln3nj1hZf1Dp/b39z7jz5/Sxh5yushjHhfhnQHIwDosmFkGPwGWmv6PrpkGHEDDHZMk72nwXZBkvcwoGKEyANEzeRNV+xIBnxxaEcyIBkeM/pjduLHNJcW3Y8R8skfd0auNlf9mAalG3vDiJPuJMVIa8lPhhEAGkpWjLTSfDCMFCDHi2GEGkg2z0shgqwYGStVWDo8iNDggYgQd5rJ5HjsGft44veMXGr0EEbAN5fvYKSUXh5EN7hNUYxQQR8MI3rdKVExUio6+UExAuTQjmkaVVj3hhEgz4thhAjWjhEgyJL91iyVCjo+8XtGLi26HyOH9EPpGPG+HDGS0lS+NYwgJR8MI6ll2HaMFITZ7hXBgjQrRliyThBEto7ZBNkmxghrnwqW0KeKVafdyFirHdPYNP4rGLHXV4+MPD7B5amPP/j4g+f1Dp+7jHz20ydOeD34uLppGvLU/B2M+LBNoBgpG6BhKLol4nJoXjGCA5FziIIR11LxOUTJgMCnGDIQkW8xRHb9YzFHX6v3zDmmQa2SkmSOCkDSzPXs/P7/P/cWCUb8dJPIMHIlat3Yzkje7ltQjGhPBsMIbR/HYhjxiOANIxAmboYRQEYyjFAOjIKRJUBFLMss3iBmruNuXOSHSnGRsa5MdZRBJoS6aIYrUj3xX0UuNXoII27aJn8HI377TS6PFSMDUD+mgXnL1DGC1TvDCE0ByTDiESsZRihmboYRQGzVMELIjIqRALWiZosE2izJakSQKp52jS4tuhcjsi1yczCMuHIApxjRx4tPyTACYZuKYaRsv83JMEJ5yqgW0QtPxGsZEnNqQTVSw4p1L9O+hljaOIo36hIL7nY6MWP6bZI+CUYqIqMY5LfpX8dIfy7LU0/KP7Z79f/65h7eGclCjTLkWxiZXGvNTYIRsj9Qp8c0YaDWMdKunCxMIaQNUfFBMFI23oNTjHhP5IpkuPEAjmPMPHggr0cyOIAszdABEfTMS3baxzSXFv0FRrQ8TjHirzayvGAE9SDPblrVnmxQMeITs1eMRC2Ai4KRvUNEUoysAxGBHtOMlu0FI3GgWkkxsriKaBipQNWjGkQGhHEnmUwVlt+yEz+mudToIYwMduG5hZHHXgulGKGNFGpoghGPEilGeCMfGThG6VNrzesNrNIdAtBjmtlhq6THNKsjWXpMs7qCjWaBB1vvFCPHZkkGUCuc+DHNpUX3YuQn7Qn9pBjRnmySYOR7H2Oi7xUjUo8ChhH9XFGMjK7qJUgwIkXBVBQjWBoCS7X2vuibskZfG5L6ZAdVsl3PEPHWtFs96iRrBZv+A4y8o5N9c0+ezTf3+5qSm6bs0i2MZL/dTj4rRjYkVIHW5DNhCj5PSeBB2FwRjLQhiz44xEgDJvQYQ3DAXEoMggxCdKgYcYXZJ4WHqwkhSSYTJ9Ks9uzMMXKOLbq5OXjdHTkIRoYr793GCUZK+OY68V72QK07JBjZ0uNv9n4rGEkOmR0KRoKf9zPNghF2cWWIgpEV5jHUWY5p0IUlkt6bzm4c17rsxlF/y4q8jLsFcFxoMYzgItMoGeE40nLuGDnHGv2++oXH5VsYmaRTj7U86DelSaEQZ9hez34WjOBQ+kXmevJhtiyg48jAgpHVL3Moi2AkaccoCkZYslyDwAPdqh2T7NgsKRpU6dN67hg5xxbJLSM//viTntMcyiC7IkMRjHzbvvvu+/KNYCQLRCaYBCNb4ce3ZS8Y0ZtD5qLnNNmLKtooGKG2HzluZXeW4n6k+VomiGOfRoq7sY4yrRB2C9pEq7hWpl2EcSeTYCR6m/5djDz99hPHJ7j0b04P2M7im/t9TcWXUhrewkgiRExJMOIHDRQjx0wwAo6IwDACqKFiRH8WaooRao0ThliBai2o8ICKsgQeBLVW1KyQRsky1HW+GDnbFv3C3pn+Nk6EYTzQLfd93/d93/d9CRrL13jGzvqITV1KYxqFgI0JG7eoCHEqgDZfKrFQxPEJIYQQ4gOIP433nUldQgOUAsWBeViSh9euETtP4t/OjF9w/ypFHeAP06D0MNRgeN2AhJATHYQwwvBxbuKFIduvmZAAhJEm305EAEb2YxSazUWo+byGMGI3QRbACKbFWiIII+AWl5YaTy/B45dLSwgjSyY4KG3W/ssw8p+N0ZZcqvMvmTEYYZgxRhBGFB0EaWGm0YQSwIiN30X7ITYO0ykEZglgxNYNEMKIYVsgEse4VxWEMCJqEJmtWpmshmVi2v7LMPKfTdFrz3kvv/zygQMAI5pmg0yAEUY9FMAI9fn+RIARy+A1gBGKOw0IdhZvggMhjFBC3IBAjHwLKouOcCB0BroAXLNJSreIAhhpGtzxBwCFUyZ1iBGvOx+5mdmjz52Fhv3XnXLOSaIvy+bIlQts4jmoaR25v73pGS2bnrGy1iwbnMEvLiwJQamsTU3TM5mi3256pk1oemZMaHpmbW96RsqmZ3HZ9GwxEALgKBucLTaEflErBX5qmp7JGO2y6Zk/oelZ0xLaCg9ZIiPFjXgkzJhQI9je9AySVRanpumZTNFfbnrmhCOVzpmouHRPjxnh/sGmZ/j639JTO9RcqbHanump2lRJpqhC2ZnaFMkYVTNQUxYjmaI/+F8J1P8p/X6K5MjJz/9kyc+/hJHKScaokoGashjJFE0FjPBGddecc8rxd+6wQ0zZJ0a0qxvT9spht59QO/vMWpUlP/+7kEyRhBGQjJH8MqqcZIqmFUZ4o7oTL6zN3LdjjBSv29vVTaocds+j0z1y8vM/UTJFEkZAMkbyy6hykimaVhgpNx2fe/qfG7mxdnXAj6fsu2BUKTcg43mPHIkjd/bs8Y+OWtqJ8ysk+fnfhWSKJIygZIzkl1HlJFM05TBy5127xEjRrq52z6W1E0eVcgMyf17qkoth5K6pnX7cSaKl3ej8igja1cnP/y4kU/SrFFU7O1OSIhkj+WUkU/TXUzTlMHLSvmt3OXKiXV3trtMOu37SnNbJV14AI3f47OwxF4qWdqPzqyP5+d+FZIrkzAhKxkh+GVVOMkVTDSOnnnNnbbcjd4l4BvuJk4+fOHKnn3/vmWeec2rt+CPEg9twfrUkP/+7kEyRhBGUjJH8MqqcZIqmGkYuebS2m5HbaldXm6mdcO6oMrbAdnLtxnvOPPbs2s23jUZudH51JD//u5BMkYQRlIyR/DKqnGSKphRGeKO6W26bnZ096c+P3Fa7uto5+045bFQZX2CrXfjUmaeffcrdN41GbnR+dSQ//7uQTJGEEZCMUU1+GVVNMkXTCiMTO8T8r/rEPLVDqaWUUvZ20VJGKTpB1g7FNlXlDswyRVs5eb3UaqlPSq2VWi/VLrWxqa3SwVJbtUGpVql2qdbvSatNl/63MdrSVnh6pd4sNSy1Xqoc7YOlWqX+fHj62zVlMZIp+oVoKb8UmSB3u+IJcnYvRY7c3wojqlJXTRulKHXF5DCiaYrmcxjRVEUzDUPUdJ+CdF1TbANhRNdVHd+5M4UzwRkWd6bGHWO2qdmGhJFqawxGPn/luc/f4zBywDMPLHMYGb7qrh1CGAnzkGUcRrKsU2xwGIkikg85jKSpkx3kMJJHQd7nMJIkTgrvUEvyOCk4jGCtxe8nSe4kBd5PkjQJC3iHUgKlPhwDN5+AEQ5qEkaqrckw8uqr3vBTDiMeM72XOIxkmVusv/nmJ8Nhp0PDjMNI2ouzgwgjYUiigsNIksTpgMNIFHp5wWEkhxS1OIxgxrocRnKRrDbWGlgTyVpA18+TBSct+iAwSbeQMFJt/RGMqGpdtTmMaGpdszmMmKZiMgIqnevCcd9zQegMgjBiUF8n8A7O0GkAznEo1akL7+jMkbOoaQUOd027dP7IMQvcjmDkwjN38Frtri97CCOaqmo2SkUJGDF1Xecwomq6qnIYUQEuNA4jPqCHL2BEN3VDIIhpmtzppm2aTe70/dwxZpq+aTenDUb+tyniMPLaK88LGDngHXhHwMhKe2UFYSRaeyl0hxxG2sP2kMNInsBfQw4jrWIINNLGWprnAkbSIoM7CtbyLMk5jORpN0k4jERJurDAYaSfpGEhYGQhXcgEguQpv6GIWjp1MPK/jdEYjKwN11YEjLie5woYGUAe+MxIJ4rCUMBIqzXMOIzkeR4VHEaKrEgHCCOYMaxBdnpZmnAYiaI0j/ocRhJMFoYnhNPmW6j5BI4ijCTdBWBfASMLyXw6dTAiUzQGI5qmarqAEZSAEd+2fYKyfZCAEQpyQegMn8NI0DRsLwbBoSYF5zjwzpqcMqhFGRWuSSzLQTXBNbmj7BeuCU6Z1Dv3hONnZy/78xh5TG1M+2Y23ZHHHVur3XEcvt5yyj5RG/9fH+KB2Zt5YdJ1/lDjP3Xx7DFH/Eswoqi2oo1mRkxwYmbEUE0OI3hUwIii+QqHEc3WzDqHEThNEzCy5VRwAkbwIgJGNKxVG0ZkisZh5OX3Xn5bwMhzy+wlASPDQ6vvchgZdnpMwEixkRYcRsKocMIWwkiSDZKUw0gYFk7eQhjJk3YkYCSc57XBAG4efSfF+0l/PsqChN9PijwlfGYE7hiOU7RAQDTzTh8d1uJutWFExug3YGT10+URjDz3En1WwMgQYJbPjLhuRiIOI0lxMC8QRpwwi0MOI3k6yBMOI2EkaoNBmLdCASOOk8XzEA+RwBzD03WcNFhogYpwPg3yFkYsdfKlbh80v5A8HXerDSMyRX84M6L4ioARFW9fo5kRpiGCcKcbAkYMzxYwApyiGwgjvmcwLYhB8EO+Ac5x4DTfcB2QQcmmMwKj6Yycz11sUM9mI0f2g1Mm9c49/dLaCQ//nSN3BFzzohMfOmO0tXlch9+Kr1c8WBZ2P3KljvzXYERR67qNQidgRFF0xRYwoihzYpkGjs7hMUNT8ecMYEhV1eq4TiOcia6pgbNps3TUYujwclWGEZmiMRh5bfn5dwSMPGe94wsY6S23ww2+TNPxOm6BMJLnmTtAGGkFbkgRKDYORlFChrgk03IDh6V4Pxk4cUSywQBqTuAswbLLAFzjadJtDVr9rhMES2m/1W5FUSMIu/12qx87TjPqFnAbccDlpZvvdqt8F5Ex+g0Y6b205j7PYYRS1w45jOT50NngMyMe6dCUw0gUpTxQQ89zaFIMITxOmLNiMDjYAmZxaF4UACNxHJK03YbwNLyGtQDxKJPVLrIGWWRJtwXJenoxWHqxaCGfENZ4ERikG8dxcz7NKg0jMkV/BCOKgvcbhBHuOIxomq1QAkKnonNd0zQ0JmBE91VwMa7XmKYHVOLapq82oeTEtm2gc7jTuHNs29cYkkq83zR0hqc19pu2TrDUMIRTfqNd3bX3nP7nR+6KfTdA19x9+2DT8dWnnHbGDD5wffh54vfxlrPh/UK8vngyanzkrp+95yKBkb93HZToyis67oqjmz918nFXiPpo5GbOOO2UqzcrZ951Glx0p+3qdg8jQCKACiDhBIz41FQ4jNQ1qHEYgSE3VQ4jMJgqUgYFJNFVC0TVTddUYOS0TWfqYFhTtcFVfM+ITNEvYeSdT1///A0OI3R59Z3nOIyE65+82+MzI1GWuT2EkXBjfZjzmRGvKKKY7xmJB+9mEd8zQrIiD3GZZtAoWmnO94wEaTePcJmmFWfdbAHeW0UjSV6M8A+3UZrmES7TwMHEETPtTpY6EZo+1J6er/oGVhmjiTDSefuTlWUOI37UcymHkc76m4MehxHay3KPw0gM02cYqBbJstDle0bc9iCN+J4RD2ox3zMSdIdJhDMjfZKkkQO1MlntfjfIFxIenm6ACzt8ZiRfmIfFGVAjTWKn6htYZYr+CEZsqiscRurADAqHEeAPXyOg0rmuRlxquiiNEXAII5QRm8QAIzrxDBOME5skoLYDAucZ4EA6CZoGdyY4OjpKGHcuOAJuMoxcuu+Yx/48Rj51Z+2cW2bOuPSEo0+cOe7Um+dmTr/o0topJ4rfxzuuuP+OS67E65fddMuR45U7ysJvXgcluvKKjrtw9OK5mc2fuur0o08S9dHIzV186nEzo8qZx9xcu34PZkbq8M91G2TW4Z/rJs6IKJoGCAIwYs8piqr4Bgz7nAo1ClIVuICGMFLnJYSR0gG96LraHDkNHaPcVXuZRqZoDEaeW15ePsBhxH7uuedshJFDLtwuOodwZsR1OzREGAmyrIj5zEjTcSLGl2m8JM0CXKZpWU4UNTiMsDxPnMFBXgujuIUwYi0kidMGGOk2nYXc4TASh0mQIowsNpw8aKGCeOT6i8HTC0HVN7DKGE2CkUMMkuQdwtk1kzFmLwOMHEL8iA8BjBS+2+lYBcDIBvBr4W4AjNC4E1pDhBGSJGnAYcRyOxGB2qBtRXkecxhpNhwnwGWaFnMiSBGEJ6XxfNiAGk8WR5W+s+hEJOmDlhpxtDgVMCJT9FuivrhpUerbwgGMMMU0TYURAg43QIJzPRWfwcAdrB7UfA23q9om7mVFGFFtcC7CiOrDabHjcEfNkaOGABRtvyGcpxm06aMj4Kg/GUZQF5/z5zHyNoS9y2BMTjvrAXi9aKZ244NH3FvbHLlarRw5rskj93vXQYmuvKLj7uio0O2IqaI+GrmL4KqXjSpnnrMnyzQ6ggiuzvBZERMcpbaCQGJTGKE527AV06DUVHzqw99884iv6Qa1DAXGUDEsC5w9cr6Cw8+dOnIMHKWaMQUwIlMkYOT5l/nsCMDISxRnR14CGNl4CYAkXAcY8WB9P4yKtfWDMDOy4WwAjBRe1hqSAmBk0IH1/XgAMJJ5RauI+wAjraA9aIftg1ALslbh9AFGuqQ96IctgJGU9WEevQ/3EZwMyTO4sRRPL/T7Txd4G3k67/djuLNAbb7ox8U0wIiM0bg+ef4FyE7nbYCR0Oj1lu2XAEY2wjffXO+sA4z0aDHMWAYwMnDX1w868DhNtpQNC4J7RtoxhMXFPSMZSQteGxTBEJZl8FGsFGpZ3AUY6YpkAYwkVrefOlBrJTxZBabo6W53PsFlmgBW+hoV3zMiU/QHMGIqFIDEhBdT8QFIdIARqiKGUJyx0MCp4FymA4bwdZqm6rmEP0Wj08AzcN8q0Ujg6WAcD3gl0D3EDROcGYAjehAHdun2Cxc7gfEL91swIv7bdz9yl4nf0wvvvQFxdGtOa4cjN/k6R8zOXiW68o469IqRG9WPwX+PqI+NnKicefaewIimYEFDllTQIIzoqg4yEUYUMEgeVFNNEF/DgaO+bVLLVnUsWdbI+eBMDcx+4WwQOCbcdMCITBHCyGuvPv/885+/AjDieWEYHjgAMNJeXVlZGbwLMMLCPC+y3tp6O4c/zrYHACOJmy8vpxnASCvKCljCBxhJnCRJ0gxgJIuyLCtaB7GWpmmWwf0lnQfX7ePTmeDA4kx7nsJUegF/uHUSXmq1MnQZOlGr+AZWGaOJMDKERb01fBSr5zEXBTDSXoaZkcG7ACOhF0VRvgwwMoyKosBALQdRnie44agIU8wOwEjijmqDNMQUFQAjOWYMa6NkddttUUuhBslClwGMBOC6XQhXGuewKFj1p2lkin5XVFU0kA4wooEDAYzYGt5ucN+qr/sgcC41KQoCZ3DHAEawZ4VHWBxbNm02GQEYYTZlFiMAGcxvMsZd00eDzjI2HTMIyNtyk2HkmhNqJz180q7mtK6aOe7S6zfnomq14y86deJuH1xgmzxyv3cdlOjKKzrujs1p8ZETdRjzy8o5LV6Bkat80zP4JbTlmtY2x5rT0PRMpuifa3o2+FuanvWnoemZjNGeNj3rTwhPf/qbnskU7UXTM7dsega/hITbuZRJvXOv2gedb3ex9fjJ0S6dx3Efzt24D+fyR0okfQyfg9q2wFY+B1WO3O9cByW68oqOu/zo2MiN6rWrjps9aeaMu2G3j6j8AzDy+32X69ul/AWp2zVXq65kij57ZlP1Ul+WYqUOleqUerfUC5salopKZaW2ar1SW7XlUlu1fFNKrcKSMXqq1PullFIflrJKHSoVlyrzFJZqlfr9QCWlJoQnL0tVjpFM0VM7VH1ndy1tgvQJMv+s5v7ZdnX3niVGbgxTdyG4TqkdPCU16d8kYWR3qkDTwylMEcLIN0/99GsYee/tA++9xWHEtnWbIoysrbzaeZvDCGM+c12EkV7P7a1wGPEI9Tohwkj0ghcVHEY8j3kdfu8IO17Y4/cO12NuyGGk45JOjjDiui4LOYy4LpyfI4y4AXFDKOZ57JI4jKoNIzJGv4SRH7488MOvYeTT51/69C0OI/tt3TQ4jAyLznCdwwizfOYhjPSW3V6bwwghlDhOGI46sA4RRoJFK3A4jIQOCRMOI0HAeC1JnJg4OYeRRkB4LY+dBpmPEEYaDdJwwmrDiEzRnsCIUp9TBJMoSp070+TOBO3MzU3oEAO69L5by9IVR+70VYzfscBuQIEwCXXCcYIW794HACl0yz4488x7Zk+5f1TgZ/6B8DqVGzkJI7+QTNEEGPn+s2+3wcjn0IqVw4hu+6bNYeTQyqurAkZA1OMw8urqq6sCRkCsw2EkB8AYwYjreQJGwijsZJmoEY/DiNsJXZfDSOi5rIMw0um4HTfkMOLCz8YCRoI4cKoNIzJGYzDy7dcf//hrGHn7+bcPcRixTcM0mxxGVtbaKxxGqEUMymEkS7N0RcAI81gDYQRQIokKhJFF0iBL8xgox4mcWMDIUkwI1JLEjcMg4DBCSLxEOIzMA4Q4CCNxQGLSqDaMyBTtDYyg4L10CCMqSBO4oUKtdDq6OjqzrAGMTOgQA7rg7K2Ru/yonb2Ow+TRJ9QmS2y9OfHck7afOct1eu3vkoSRvZJM0QQY+eqnr7bByGtvvcZhhGq2r5oCRl59PuQwQqnn+wJGeisvCRhhzKWUw0gnLNyQwwhjHcsKEUaAOjw3zaIoZMT1OYzknhtSDiNex/N8DiOeFxLGYYQAs1AOI54XM1pxGJExGoORD3784Ncw8vbKW2ufcBjRdEPTBYwU6z0OI4FBiWkhjOR5O+oNEEYsK6A0RhgJw8wNOYxYVtxkDsJIEORenCKMsKaoJXkQhM0YYcRZWgqMRYSRwPECg7eYJySwmk61YUSmaI9gRBMwUjrTFI6DR12rj5wCTgejA4zUFTClm5sIXxc/efitu5jT4q+PHH1yrXbW7O37Zk8S3VkOP/KMk487cbTDp9wHfNMR4qg4UyyPiT4uotfLn5GEkarpf58igJHvvn7ms29+BSPwTM0bXwCMUIq9Z3yKMPJqb231U4AR1zeoRl0XYCR6YdUbIowAoDCddjoAI64X0l4BMBJalNkkDAFGPOYanTSNwg5c0XbDqJdHHrN8WKeJcEaeUqgtA70Qk6EJGWMmi50oF84Jq3wXkTEag5GPv/7xgx9+BSMra5+uvo4wAnnSFdMwAEZWl9fCDYCRgBimqTMPYCR0cpYNBvAOkdCBT8JWEQQOjYqiFTlNo8lDkaWEeYaTJBnWqI014I1m08B1GqdhGb7N12kIgR95FmjEsZiFuFNpGJEp2hMYgVPnFB0lnIARZU41QRqs4TwFPwiB5A4O6uDqT6m6ia5enwM3GUbuntntyOHryZtwKLqzHH7rDbfecKzY4VOO3EM3nS6OijPFyIk+LqLXS23vJdrVSRjZhWSKfpWir2CV5ptnvvv2VzAC0yKfvsJhRLVtW8yMrL399qsrHEY8z6Z8A2tn5d3VFxBGQoATSvkGVraaRR0+M0I9lxG+TMOi3HUznBmhHnEJnxlhsCbj8ZmR0d6S5ZyFLvOWlxFGXI/ymfaIxQH1Kr6BVcbolzDy+Q/vf/ntr2Bk9aMPP11DGGlq5n7d5HtGoo1DKz2AkYZnWxbjyzTuWrsX4p4Rxwg82sQNrEMy6sAazRskYBgKyFOYxw3I1VYtibCJt5skyXzcJMwNMDyLQUA8nBmZtxoBJRXfwCpTtDcwomlKXQeVzjTRKRxG5tSR07lDs81NhpFjL6j9LSMnurMcfhj89eDYnNY9pxxz5+jo+MidU/Z6qf05yZmRSuln9s7tt40iCuMuTcqtLVAuEkWAEEggBAgQD9wvQoCaWt6dndlZz3q947UNzmIcxQU7JqDEJgEVkkAViRckChVN84SqPPShD1z+NM4542yT1ESloWAr+0nUw2fXD53T+tdzjr/u+ypa++DP7EXQDhj5fHFx8VMc03iQo+tZ2BnpzXZ7012EEdvzXI8WWIPGzGyBYMQuurJIC6wuLIMECCMlx3W5IBgBfJkOEEYCB2hEIoxMe7JQ4AgjougGooAwglkAsoMwUmRu4JYQRhicxLAvsO77MtoKI8urq6unt8PIHzOQVtP4A2CEYV+cxjQ/FHq9uRKOaaTluy5TACMSbjz4DmHEYVBPeYQRXciXJI5pwNNS4M5Ii/FAcYQR8iR49ZLHAT1wTBM6Lqfdkg53ZSCqCCNQRVxXRgBG0iq6wTBiTWRhhRWKEE9whJPTPyGMnJjInqSTfeIkeDaccieyIDpN0GkwjLx33+EH3npj7zdn0lno5g7sGLDdfuu95tkrN3f8ED6R3OI/UQojQ6Z9X0VrOKX5AOY022DkzCoAyel1hBGM37URRroLZ88vfL90djrwoOVBOyML01Mr89PzNKaR09O0M9INZr+fK7QBRgouh2XXaYCRDo9as8Eswog3HYGHMFKMZqMAl12lC/TSH9OUIhlRZwT2BWQ+wjGNzpdkaQRgZF+X0RYY+XUDQOTyb9tg5Kvejz9+0/0JYMS3PMYcBjCyEp09+0N0DmBEWIAWjFerHxYgTaQwBTBSZTB7Ybgz0uazkMDaBhhRLMxXBe6MdATsiAR1gJEC4/gtGoSRYqce8Q7BSL5CXkcCf8C8Bsc0Ip8XQ74zklbRfwEjuQn48STmeyYnx6KThbix9WSbU3bCcqxs/2TDaSCMgPaOkWOPZPo5Lubmdg7YXjlgnjWvzLx69O4HRuvmUhjZorSKdmgNOQT3RrbByIUmZJ+dbyKM2EUUwMjHvfn5peb82WnpShDCSHcGgtF6PYCRghsEQaEAMNKZngW1AEYCXgAhjJQKFPvQTjyAEVgtAUXYGYGfWCpNRw1EEhDASFViNBF+nuQ5tGCqowAj+7qMtsDIxq+///77rz9vg5HmCnRAzp8HGHEcBkIYWWjPz0/NwxNVzTiXGIrZLrUwtBdgJNQ8DEIFMFKv9hNYIy4VqAowku/XU7vvIYxUTT0BjPC42i8eEebhodLpVGUI1ijASFpFNxhGska23T8hjEAKOQpx42RyIs8aeJoYlBCzl5s7OH7rA+MQ2P/UseN3mnQWc3M7BmyZJ8bMs/1Xvv3gXeOjdXN7IJWB9PJPdSIzvEqr6ESinxNlEzUT+YnmEolE9XqnTooTVSr5ihHnMTcqJwpDHhopFSqjXb2hzvFNy+hKdp6d6JtELNFSIp5oKlFSHqdOtU8ZVSrlilHrk1ZflUT19+t9XfHeTzTAG2YYSavoBv39erCy169/MfSMfhx9pTByHUqraDcY2bjsbeyEkW7jo+48wojj2JbtIIyUJt1Sm2CEeY7PNMJIGLhh1EEYcZnHRBwThbi8ig9cu0UmCEbgeaEQRkKhmY4RPCQXLodHsIQWMSdPuGKrN9wwkpbRGkXnbYGRHMLI+eby0vomjPg+wchce3KuSTAihNaCYKTRUY3vEUZqwK1KIYzAlA9aaggjSnFwAEZaUUWV6gAj6AUKIQUgpKwqEcFIuazAQ/AArxwhjEC9gYVeHg/RcMNIWkUpjIyqUhgxSn///2swcun0p6uXdsJIt9HtGRiBHqdNMFKajEptghHfYY5PMKLCQhghjDBfM18QjMRhLPMII4zBS2OEESG4FgQjGjyG4BGHWjJpwAM8jZ6UbswEepK8FEaGW2smOg+EIJKDFjjBCETnnUEYwTrxbZ9gZGFuYcHAiCsYMzDSaNXrBCM1WRMxwUin1Cm1NmGEhwgjFYg6m/yEYCSYrHGCkTwGm0F/BLwQWIZgZFLB/xCMVGrlWKFXAS8spzAy3BpVGDFxdS+Mjz+zJSHmunNiSI+M37Zbh+qR48fG3xzgY4zd7g5pCG4uhZFMWkW7dkYuXrp4FYwszy8bGIEPmSx1RvKFRmBgBNslNiMY4XnNOwQjwCcewYjUivVhxNGOLxFGtI49AyOMacclGImZtjnBiOv6jkBPaM282HgMvOGGkbSM1ig6z8AITOCzBkaWFtcX+zBi+7aBkV63OUswEjPmOi7BSNSZq7YQRmIRa1YjGMnX1STBSC3mQiuEkWoQhWVojYAnlJBlhBHFKzwkGOFcaUUwEoZVUSYYUbzGyuiVleKiMtwwklbRqMKIiau7bTtG7hEmdx+XPft85s6jA3xcSd7dIQ3BzaUwkkmraDcYgb/cfr6xA0ZmlnvBAsKIZcHyFsEI5yXWoTENLn85tDMiROBXaWfEsR2b0ZiG+cILaUyDn0UaxzRKM+bTmEawouPQmMYF7mDwiHzi2ixEjwGfaJV4Q74zkpbRmonOQxjJmRxthJHPFs+f/gphxLct2zZjmsbMQmkeYCR2feb7NKaZm5yMgjmAEcW09ATtjIRhJDu4M1LWgjNOOyNclmWFxjRCx0LRzggXYZzHMY0CZhE0kqnymoxpTAPVKGLyYq5cNeQ7I2kVjSqMZA7+Kzf3BqwfP/NG5v7xI2/TzSU7PBRRt3UN+eGbDSGOjR3IUFAdnI+NPdSPsaN3MP6ms1P//82lMJJJq2g3GFne+Pny6R0wAiTSWwYYcXI5MCzHn2u7nUZBtttzglmOnbUYE/UOm6wKN4riWGBUoeNqWGD1pGSsWuXceFqUFfcZ0ywsh7F2HCAbEaoaAyzxNVdh7DB4mQCPe9qHk1ShBM9ytBhqGEnLaM1E5yGMQE4D/SkBMHL6zHrzs/X1b5iNOQ4wvWFL5ybnV3ozzeaS8G3bchzG+YdtaKl1JoFGuI8tFCHLp1qilOdgn6ooJpjDYl5pva/DENgialWU7zJfx2GlXnGl1EKV6+WYgaVDII9Qu0wKQA/gGOa7cQ32SVxgHx2qoYaRtIpGG0ZeOHL83T3d3NP3ZTKHn848mbn38J1bb85E1G1dQ36MTgfve/TorXf0g+pefjRzRx8azTsY/8ZjJMXVpTByHUqr6G+rCFZGvIug7TCyIpaXlz+60PTpe220M4IRZgUXxzQMvxhnaQEwArwgfRzTaIwHop2Rqs1czXBMo3O24zPcGRE200JDZ4QDyDDGeKhCeLl2hAIYsW2H+bjAym3HY35oPI95w77Auu/L6KKJzqPOyMRJKBXsjKwvL66ufrqOnZGTYDDQ0rmg0e1OYmfEwQLQMedTbRdSUgvYGbF9JhgusLbdoJDnbeyM+PAigQusdR9XmnFnpOy4AhmjUo98ASaOabQnajVFXZCiVEphZ4QxUZNl8PCk4iHvjKRVNNowcmfm0Kt376mndf+hh1+Eb1ONj9/28Nab60fUbdHrt/TvD2/UBNW9eM+Bp83N9d/B+EPb00phJJNW0S6dkctr0B35fGMbjCx83mxeCD6DMQ3mIFsADnMNt9FuixbCiGUzRjsjUVF1IhcXWJnlC00wEno8X9VVhBH0mCAYUeVQw38hy21+i8Z3eE1LoBLuOCIuEoz4TsxZqDa9kYCR/VxGa/3oPNwZyU5kcwQj8K8tfrOOcxrm21nfJxiZj1aWzpVWYGeE5UQsCEZa8sOp77EzophfUxphpMXzrVaAOyOTGuhEIoxEUtU7CndGlNZlFSKMVASPKgQjoVOuKIIR5cHCKsGI9MEjGIkZjAtHAkb2cxWNNoyAHnxkTzd34KGbXoMo3LszRw6ZmzOBdBhRlyjpaSU3Z/pe97571xFzc/13MP7Q3lwKI5m0inaBkU8vX7p06fLqNhhpzPR6vW4XYcRyUP5cKShh5BTCCO0BIIxUhcJUKYAR39cghBEpQpACGGFFASIY0RwUIowwtGIADk+DU+MqlBjtDVaoYibiOObYGWE6jmU8CjCyn8torR+dhzBCJIIwcuHCmTNnlpoIIz4zWprrLqAARlzMzhMSYKQRtUDtqalQAInWEEY6hagDWWcII3FNKYUwkldQdu93AEaCWhkFMAL4AYoQRsgjGDEewogChxTi45AvsKZVNNIwcvTuzMFXH93TzR0dG78jc/v9medeOAR38thmIJ2JqEsGbKgjuO1z8PCjT0NPy9zQwczRB0zgXf8djE/O1fr/by6FkUxaRdcdeuYMCD3TV4eeiX0YepaW0dbQs9zVoWf+gNCzeEDomdrPoWdpFY0qjFBc3ROHx8Yf3+Pq8YuAh/fef+ylZ+FX/InD4/1AOhNRlwzYUM8dPzb2Jm77vLO5EXR87NiBjImxM+9gfHKGZ9snlyibyEvkbModIJlIJJIDxHfTMH+MpFW0e+1YiXKJ3EQsEd+UTBQMUGGA8temof4UScvoxDXKSpRNxBIVNzXoDx4+QIVEYSI1QNVNDXMZpVV0ItEvidYT/ZjopwH6+mp9O0Bf7qovrk3+tSTE7KucmL3BCGy3Z22CEToRjFhW1i66KBtOHsEIPO8wKYVwHDvLXCHQynkuQYnnWJ4WCCNFzyq6HMV8m+krp+GGkb/YO7PfNqoojEckoQLCVqAsQmxiFQIBEmXf4YF6NHe/Nx7PeFgSRNMSKZZdKUqdQsBVS5tFKE/ILIbQvhmhClV9gv5nnHOu49qVm6ZJodMyX6X040xmkHw/Zn7ce+c4T9FFnx3wbkQh7IcRFhZYQjCCThKMQDpkSjAieSgNwQiGwkOJcExYghEjuFEllDHgEEa0NTKeGAfhZpOid3rdWR3Z8kS2YSSP0fZgJAwLoUMYCYNCKAlGOOTJEIyA48YgjDgZulSh6MZDMCIEF4pgxERcWIIRylgRZLSRtowwAiYtF7MNI3mKemHk7OnfT3kYWTtx8JiHkZVjs2vf/oUwMrP4xcwvBCEtcEcJRhaXq4tLwCDoas0GwUhzubLcWEKzulxpNRBGmu1Kc6GBIrfgXR0cwgg6OLyw7kC9rtluNnMYuewwggUPI1APPYxIzrhBMU7OWsul44xgxMBRgTACJzmHx7pOKeeEc/A3OeldhI0EbA4jmdZFnx0Bqh9GKB0eRjhj3MNIAmHyMIKpIBhxQiRJDCInFMKIwPNKJXJaCIKRCW2SmBDEGqvJWZvu1WVye9HlMJJtbRNGOBQIRhjIwwiliGBEcs4JRmQCIfMwkgiXEIwkGEMIFjWkEc7DiEmFIBgpG+MUwYg2OlU5jGRbfTDyx5mfzxKMrMx9c2LFw8jMibUVDyPwVeEzBCOLoBkPI4cWlxcJRprTi9PLBCPLU83pNsFIY2q5skowslxvTjUboK4jGKm3EUbQ1BdAG7loYLu660d23rmFdnUP3u1/btSobscYfGnR7jH8+cLOkf5jd42+8/rNQ3hg9PmhwfLXvBTd2H/uvz4zIoMOjAR8HUaYCKVBBWESeBgJmQkkwUjCXUAwIplgkmBEcsFlijAiuWGIIOhS7p3jKXPZhpE8RZuYGQkL58FIyETgYSRkLvQwwqXmCcEIY4Z1YERa2YERPEow4hIlTQmVJIobgpGy0LxIMCJUZLwzKhLepeiyDSN5jLYJIywJOMFI6IIOjEjDOjASilASjHCumYcRyQ13BCOYMQ8j0tlOxzwXWW4IRhQkK0YYSYWSopxtGMlT1Acjv8EfPzMyuzLrYWRt7uTcyg8EI1/9eGDNw8j8j/MtDyOVVmWVYGR5vlVbJRgBANnX9DBSaU92ZkbalUoDRW59ZqRaXSAYqcKfBTAdB0I32ew6qEUD29WNvTB06xYwkrRxozqq3PXQrW/v6tnmTOr5mufH3xraQDu2OHJ07r8PI2FhfZkmKDCCEcQSZ0AiCBg6a00YskDQPYGFLKRlGsZk4CyIXER7RjiToVGgHieZC022l2nyFG0CRoI9/TDSzYmgnPhlGgaDLTyMAOYKghHGksDEKI5RwGUawJKEqRLIO4QRI5zw4CGSlNlxciLl605zm/E9I3mMtgMjFKOCRBihPCGM0K1FEIyEIaSN9owwQBWhUDyU5EolyZJQ4zKNklyGGmEkljJilmBESBcRjCSJYTrje0byFPXCyOk/zn53imDkxDdrHRiZmVs5cphg5NBXi1/8SDAyfWCxBg5gZKo2va9Fe0WmKvUaLdM0pirz1dYSCLljimCkXp/6FKdD+l0dHMJIvVqpIHigq1bJNeuVyUqfiwZtPb7+vi3NafmWc3e/fOfIs74tnf+kfPu53soL99JL1n7kYBty/8g9M/rqQx4jN3dNUn/lqZ137hr2Zd/qrvfc4V137nzKVzpXvowwAiQSBgQjQCJhwcNIYmRAD5mCTIBBjIWaTAAurDacSRlKo60OE8FCMOgiHqbaKhs6IbnWClyUrDsXgct278w8RRd7duwBGi2cByOJ4T4nQCI8IBgB7HSMYARTxAhGIDeOxSA4aiTHZ0fMjBUyLpEz6MYncOXGaaCRklTWyRK4CXJFcEW5V0tXLGb5KZLHaLsw4nyMkgDvOwQjlB2EEQMHGaRNKwU/JVMo+GXIGAQKMqYdB8yNFRMmkQpoJAYnHDBIWYBkCq7ErZYyLmcaRvIU9cLImVO/nv6TYOTIyuET3xGMfHX422OHCEYOrP0y8zXBSK31/eIUwUhtsTU9vwQM0qgtLy/Xl8A0alPt6XlkkHa7Xq80G1CqNuv7arRBBNxkrUWuXZmsNlcBRoBAKn6HSBVErlmtTtbraJrVSXSDYeTN114bfe8SR67bcu7uG58fesa3pfOflG8/11vZ/fgbux95ojNysA25d+SosnuItMlrgvorw2N3PLynM3K+1V3vucN7Hr5jbNhX/JX72tVtC0ZkASdEcHmf70HHJc6H4D1CgEn2MBYSjICDGsJIGILhWltTQKettWmBcR6CUyYAh3cHhQ04OT/nsr1Mk6foYs+OEN+U2xP0wogorOfEoSs4IZQNJLCqVdYaDEWAMKIKUPMwAlGQHJdpLD5qeAlETpYARlwkBDfjAB4hWD6BjkFNnnNZ38Cax2g7MJJQjBIBeYJ8FRzAiMY84U1GiwBvN7hMYzFZCCPopERXUoF0juOUWxo4dAAjOnRJxPH9cCldwk0RXOic4FnfwJqnqKtfz/7+G4hg5ODskdmDCCN/zc7NzX1Be0Y++vrr+S/oJZrP57+eqqFZGq/Mz9eOglrj81P1CsDIUmu8Up+vLIHqwBiTyzgzMomOXp2Z3FftdbRM8wnCyAIIXZVc+5NqvdLrBsPIW6++/czY05c2ct0uL3cjg/q2dP6TovZzfZXdwHXdkSMNHrlNXhPUX8EWeA91Rs63uus9d/gh+Dc86itw5cu6TMMDB0DC4AcrSMkLuFfEBcYImn/nBWEScNbSTEmYWK0DJgTnQlsTJFAS1oKL0hSdgn/WhuPqjACX8vScyz6M5Cm6oJifFemHkW5O6H9nHa72QwCU0qFR1iaAriY0ACMmsMoyMHEaamW5hWeGCeOSkqoEjnk3Pi5FsWxwZiTmtliSuG21jO3hXddFWd/AmsdoOzAiAwFAIgWYJIE8AYyIEJeIBcGIwLk4rZUJUqtZqhQ4Yy0HV7IhrhFDnsoiVDFkDJZpIFllJXHfKndxLAzMjCiuy7HL+gbWPEVdwSrNrzg7AjBy7MjhkydxneaHw3Pf/vDXlycBRo4d+OmnXw7g6kyrdvSnHyvgjrb2NY42Kg2AkdWPl8jBlpFPG0utCr5OU6k1Gm2cGVmo1hsN3B8CrrKw0O8WcEtIsw57Rsi1CUHqnzQX2u0eNxhG7nkOP9mtjty9+Ck/0rOgRe3nqNI/p7X5kdv4mtePjj7ZV/Ej5+v+hW5f7xs5qsCVLyuMhAEWEEYCcggjvlsRGMMCcggjzIE8jEgphNPWMQklhJGIuySJwCnJBQhhJJLrzuGVhMk+jOQp2hBGAlAfjHRzIignDGHE+ZwoTAwafKU34ZgEE5NDizCCrKttCZ0GWYARzFkpVuPjNsL5NjDjexOr9ip0SmgFugpgJI/RVmGEBVjgAg0K0uOYxGkNa7UMOVqtIWMJSOCthXa7GoARIQ1II4x4BzAinEYhjAitY2WLRZ+sqwFG8hR5GDlz+uzZs7hOc/I77OM7cwJgZGZm5fDhtTWAkUP4vc8z+BLNoekWCmBkegr+XsVNI1PeAYxM1VdRACP72qurjdbqUqNZaTdBjcYgt1Cvo4ElmYGu4t1gGHnm9VvuGrnk3rm+5Zz/LHxbOt+ozref85UBu31ogW3wyG3ymqD+St+cFo1c77l+TstX4MpXuOmZ0V7grdc5p6zqqNddBU3P8hT9J03P1IZNzybGvS7groKmZ3mMrlTTs26kynG5I+re69V1E8WroOlZnqIr1vRs4bymZ2A2UjSoXd3Q7tGdj21pt88HHTDzbel8ozpqP9etEAS+T+9BdRfY+t6D6hm5TV6T1Fd5aucru/pGrvfc4V2v4G4fqgwauUvWZWv4fs20g89TlO2+y70dmDOsPEZXayPvLClP0bkvFQi6+qar41191NXnA1RcV6mr8oaKu1KbU+GydYjZnGjkepD1X9PI8Aag3KscRi6D8hTlMHIB5TG64jejwkV1LcNIniKEkVMf/n0ejMwelMePEIzs38/3HzyIMBJbF39OMGK1szFBCDmCEXA6JhixaZIqhBFtU2Fp9kxrofeqXhfH6KxCGAGXagW6sLsCMPLKyE3r9oWRHefqmRm5HEY6yvJ//9dMinIYyWOUw8jFladomzBy5rc/z4eReD+8UEMwYsT+/R5GtNXWw4ixxpQQRnSqTVpEGNFGC0Mwoo0VBmHExiZ1eh1BRJ+LY3IpwkgKRuxVqtfBwUgoqnlXGNSu7qXR0dEXH7z0dnV+/G56iiaj7hi6sB6+b+fo2/0l+n0612uUdNfQppWtrzj8f8NInqJsPzuukqdIHqMcRvIUbVsEI7///ft5MHLczJrjHkZcLA3BiE1KzsOISaBGMJImihw2u7NSE4wIoaUmGLGJ4ZYQRKRRtO6cJBhJhQGHMGIkHNUEHtJI70QkuFAdxxBGBrSrQ902tuVG/l433DJ0YT2H37GMpu/3s6EcRragPEU5jIDyGA1l8WZUuKiuZRjJUwQwcvqPz3471Q8jB/fPuuO0TGMcrNPQnhGTWBkTjAhnpP0cZaTh6IqxiSKpEEaUcE7SMo0RkYtomUZEhqdlcsJwQXtGRAKO9owIKaRRIHCRd1pEUuqOIz4pXGDG5/4Htjpy795wO7xJNfriyOhtviXcdTt23T52a+8W4wd39LSio3Zy/vf9ub7id+n4K/xXog4xOYz8w97VtLYNBFEljUtKm9Kkt4RSAoVeSqDkWkqhJ7cl1u5qJSqNVj0FGfQHDPoBPuRv5JxDKb32p3VGY0d24w+wQ1iVeQbzWGRd5i3zvLu83QCion9U5Hfv6EYXERkdiBkRFW2vohvcpfl5+fvXvBmpRuO6IjNSJxUkSV2jGUkArC2vfpRZaOM8ybISWRHlCbgSDMVLpPA9A7q1U+Umc0apRCc2dm6obRomEbFUpQMdRQ4fU5oYmOZaxrSITMsiiyRJaUjpcJCkxVIzcvB68ysOD6e2kCPhds/Pzs+ezh4xfrPfRtFxnBw/z7/lEa4cvyFYB//+jIgZERX52zs60kVERmJGREX3sTLy59sNYs6MjCl1IhmTGaG43QFt05QYspsntDICA2Q5ehFkGhmeGXHFhVYqd2hGLDEFmQMd6lxbhxaE8rK0aVjIDGJmACa6CHVKJ0VaNkTHopRtGL4uV8NlZuT0KLiHynEk3O4OfubuCfq436a/cJzcbOV4hCvHbwjWwb/5L2ZEVORv7+hIFxEZiRkRFW2Pa9qlucR9mlkzcmXH43E+QjNSDaq61oBmBDTajzxDMxKHcQY5lCWyyIFCxhG8yuA2jRoYQJY5p0NjbGFoZUTHwxQJsahhEOswilMyI0WYRoUlM2JDPWHqIhoWRcuWmpHd3fuoHEfCNZXbIdauabWV4wrNVo5H6PuYY+bWw7/5L2ZEVORv7+hIFxEZiRkRFW2Pa/IhdG5k1oxU9Wg0uqrpIKuqAKoKzYi1dNUmoBmxtolaLMsJM2RGbExAM2JVw8iM4BiY2LkobXI7HbGCGUSpJQZglJoE7K1iy8zIs9NtK7d3Og2Y48rNxdId0GkfjqLjOvHzc5X78PzlyTRmbh38m/9iRkRF/vaOjnQRkZGYEVHRtlgfelbfDT3L2qyzW+JuQ88gYzgHbgpzh7UR0WZoJljJvi6Mq3vcCzat3KPek5Pe2yB4d3T8giPhuHJzVxm+Pz7a+8RRdFwnfp5/Oxn5/OqwN42Ze0j0V6Kduovm+pcHhM9mRFTU7woCjyEy6ncFgb8QFfW7gmAxNq1c99FfATEjSyAq+n/nv1cQGfmJoFMQFfkJqZyYkcWQ+f+XnXPrTRuIgvAktgkXA6mxoVxEzEWURDUVtEoRUZSXqBL8/x/UkrFlnK4tK+FhF53vIQpntbvIM5YOixm5/7VDbKQnMApxkZ6o4urw0/aukRtXV7/rAUDy17aS/5u1RrLCxrORpWY7TgOkMKiOXA2dvoWEjeesQeplM3LJ/7MmTr0izch5ERddyP2vFWKjvSlAX8RFe1NQxdU9dIMgtNRtZNG1u6lwBWVcvjqPTj3A536+ugFiFi/AOZQjN9KMnBlx0YXc/1ohNtqbAvRFXLQ3BdWjxw+12cxt5Su3sFdJ2Ny953etxhS4HiVXxDpRbjx+JxCf5GEg3W3faU7SoLpMgN1ROQyWjKuLnF3INrJgdzLy7DE4i6Msc03W+T6tru/dJ5Xe1rdXJUIPpRnJQVz03kWmAJ0RG5kCNEZcZAoq5TDa7b4jV7n9bww2DJuz3M76YAXhDF5bpVy1mjnTiqhcHEjnPyNqpz/HzgbYHV9PX5O4uuojSP7uZDdDG5z1b3RyiJXjmqzHyh0mHdeKK736GpGcjHwccVHiItM/jGiF2MgUoDHiIlNQKdfaRi33Nle5X8e2jfkux+C50MKPl8oTVMoByjaSgXTDAECqXDbAjsoxri5VrmB3svWvInAWR1nmmqzHyoVAdR5XegP5muZTiIveXHQBJ6NaITYyBWiMuMgUVMo9LoDptzLKzXl17p5Wr6WVG1SoX55yHOWZFuPqUuUKdq84zhII/nxpgrOoHOtck/WMcqz0+tKMfApx0ZuLLuD+1wqxkSlAY8RFpqBSbuMEHXdSeKa1ZNgcT5WAZthBmS/YGEIXK+c/Y9Y+Dao7DbDj0z6Mq0uVK9idWGgNwVmnZ1pcM1nNnydnWqxIM/KXnbvtaSKIogB8aLvlQ1eoK214CaiIjYWEIBWhFqExCM7//0MaTpowYbpOgJh71/OQ8GGZdgn3bDKku+e5lKJ2vxnXvymKkRcwTCnyIllXt1dWYyy/2+dX5xhg2dy4mg7bwMcfACfHd3j8ARsnxxI6/h15t09UVMf35OR2itkRWFcXTW7Z2Wm7U60sXsWfEs/I4/hUFv32cFqNwSOc3JOLvJcciw/9V5sRpSh4AcMUo+AF7FKKghdPaIhJmG1yctF29J/h2SnjKanU76fNyLMoRU15ms44xcgmuKIU2ZRsiLnrvDrAwmg1/s75sdOF/S5rJXeL004PoNPOKvgJ2g4fiOZ6trO8JJ5dmxFTlKLgBQxTjIIXsEspCl6kGmK6u4O1yw/L6uo4ufp+F9ptA/2ivp0lX3FvgJeizcjLUYoacv2bohgFL2CXUhS8SG2vbkbAyWZ9kT87Xdjvwp6V1urwdbnOO3xo/3Q06k7ZzsL1nBzXGxWyaDMSUYqacv2bohh5AcOUIi9Sk/vceTP/dl0/Od4szG0ke1Zak+PJcY93+NDdzcXW1R7bWbiek+N6GJRdV6fNSEQpWvBeemiKYuQFDFOKvEhNDpNiNr3Knxx7Vlorf76u8cDP8dbG5DvbWR5OjuthU8iizUhEKWrKPyOmKEZewDClyItld8GcdPMnx56V+8mt4IHbi7vW7JzPIEWT24ddIYs2IxGlqCnXvymKkRcwTCnyIjm5NdyWyJkc+13Ys8LJ8QM2Ojy76p0dxZPbOFish00hizYjEaWoKde/KYqRFzBMKfIi2RCzVRXdv0yOnS7sd2HPCicXtcKczftfBpwc17OdhethU8iizUhEKWrI9W+KYhS8gF1KUfACNWom11zBC7iiFNkEXxQjm+CKUmSTJtfcyVmiFNkEXxQjm+CKUmQTIofb1atz4GtZ9hA1xKR7YlhXF0kceb9dFXMk1Lw2myZnj1KkFClGipEJSpHXFK2/RfsSg3fr82HtNpLfE3V1qSMnp+g/WlX/2nya3G/2zqWniSiK46edmVZsESgUbH2gqAg+UBAERPH9uMaJX8C1KwxxaYYlMURc+AXYGWlTF10Q0oiJX81Ozx3tkAudVo3ndM5PczO5vb0mPb+bnEynf+khFolFopFoRAKxiLNFJ/IzBfwZdavKhePq4GTOPq1nmh9AHk1jh2jbCcDoutDKgtP7EOeDmfaQypFELOIB0EY04gGQRiziAexnfgFujt+5OXYxehup4+dunYM+nAn9T8vnG1fW8LljPX0YXRdaeQny2X6c//9tJOe4OlKIRUwA0ohGTADKiEVMgH3025frlQNop3I6fm5hKHEVZ0IsH9H1q1cXo+tCK5OOc3QU5/9/5Vi3kYQQi7gAlBGNuACEEYu4AGEGi/MAUe9phePqIP9koNdQudF0U+UwLaZp5UhxEHpTOC+V65LzLxYpLgBhRCPFBaCLWKS4AGHGHgJEftonHFcHFhw7oWfwCzZNr/+0j5U9d7WnDyvUvDJTgOlZXTmcaROpHD3EIsUFIIxopLgAdBGLFBcgxMys4zj98CibzUSqXHNcHRTtXELPhELrpos5+57/tM9jwAo1r8wXcovXdeUaM/K0D/vzLxaJRaKRaEQCsaibLEokY5UTo7gArBCLaAK8EI1oAqwQi2gileveylFCLKIJ8EI0ogmwQiyiCbRkdOTAsRtRXABWiEU0AV6IRjQBVohFNDFm5167b0dsI49CCNsCTTqbCTJ4Z3L2/gwafwjem5kEOOscTUEI085mzO/CPeNTOUqIRWKRaCQakUAs4moRZufCROrPK5f6/Qizta9ypyyAfif83vRfrRySjlHlKCEWiUWikWhEArGIs0V+k2dFrty4PRXk4k7mhoatzBhA8iR+asGPuy07/MuosZnx8dSiztF90DMQfMqYwYscvLMPpu/ienwVp3FPnMc9reGh3GQwM7IwZE91a1wdLcQiHgBtRCMeAGnEIh6YsnPbqJyah+IM5uJa2cHp51b+zDnI9eGnFmTwWnY4Tffpo4XC8ukgLzcRVC7I4EUO3NkH03dxff3Vs8915XBPnNeVe352MGvpmZGj03C1ozbyVW2VDLVX9M+/WMQEII1oxASgjFjEBEN2bjuVm/VbO4yiW66PZyy4dje1BEHlAHTlQjyeLAzduIN5uc2V0xm8yAE7I5i+i+v1qw1wT5zXlTtTd+a8nhkpdnpPq1ZxyVCpkT//YhEXgDKiEReAMGIRFwzZuR1W7jx+gqNLU4/AcE+riScLT5NL85gKE6rcGGgO2TnlOBOY06vXY+VwHvfE+VDlcGak0GnlVl1CrFI//2KR4gIQRjRSXAC6iEWKC4bs3HbvaU1gLi7eeQLoPTNoeNqn+Qu2S3PLmbnL4coNnf+VwYscsDOC6bu4vvmeFu6J87gn3tPCGWlG/hViUZecf1KIRooLQBexSHHBmJ07cH/2diba0z7P9DM5j/2nbhaHLYALD0BXDjN4Q1+wIXP3+mfz+ClbTs8J5yLARNYJMngR884aTN/F9fhqc+VwHve0hhdzk3qlNCP/CrGoO84/KUQj0UgsEov+JK5u6biuHIKV6wjzzkiEX0mZ/+3Om5HXJlxNad3zvrmliovoq4DKytcYNSNiUTedf1KIRjQBVohFNDElxOAYMJ4+bMT6ZSb98eQgwLEsdouLdgY0M3a6RSpMBHBnss3It7cVt7zqviu7iL4KqL19E6NmRCziev5JIRqJRmJRfC3ChBgcAy4cOWzEyiE9x8BA9FQYxGmQh/9A583I7id/rL7wNt2tL+slvKq99bbxBsmH3c29+DQjYhHX808K0Ug0EovibdGJ/O8Ra9NqxJSX486c7fRjFksyPTyQ7YueCkMIZaB1M1LxNrb28H5I/e/md/+qvFlxS6XGq2uV6lZ8mhGxiPP5J4VoxAMgjVjEA1NCDI4RK4fjALaRQcpL8sbUjalMG6kwRDggru7wZgTZK61VG81I1fNWdv2r2ornrf9w6+xuu+WPsWpGxCImAGlEIyYAZcQiJhgSYnDssHKYxZJM1P/cbSMVhg7KQOtmBL+q8VuQnY2y+6HaaEa2Xc37tXfvXtZi1IyIRVwAyohGXADCiEVcMCTE4Nhh5TCLpVG5RMRUGFooA62bke87rlvacr0d97vnrq5V/avyxx23Up93y68qrlv9EZ9mRCxSXADCiEaKC0AXsUhxwZAQg2MHlbPPBikvWLk2UmHooAxE+TXNuve+7FY3Nt0PG5/fVxtXe188b7f+YnW7PpRXKrFpRsQixQUgjGikuAB0EYsUF0wJMThGr1yQ8nIlV9QpL1i5NlJh6KAMSOhZC8Si7jj/pBCNRCOxSCxCIlauu1AGpBlpgVjUveefFKIRTYAVYhFNpHI/2Tub3ySCMIy/LbtoW2iRllaoWit+G6ut9aN+f+uqc/DkP1HT9NhMj8SQ0kPjwcQDt4YuWQ4cCCGFhIt/mCzvrLI6KlDUGXh/Kq7vDmPC+0zydHf2gcyIHFr/tP6Vg2SkJqAVpCI1kcXVjYdN83SbCTFeToyIq/MhqcwnouZDkCB9b1uQGVENUpGu618pSEYkI1LR4KoIg+piSRh/1JGNxFd/XJ20cnUJIljzI39vW5AZUQ1Ska7rXylIRiQjUtFgq6gZVHfpdqyzzvnj6uBY1DghKq0bkOcOoUM0jCHA6DrfyLgZfoJ1r9IOZEYUhFSkB6A2JCM9AKUhFemBNK4uaYw+7dJGivi520mYEJXWDcinm0eB6eT4yARG1/lGXoRYKIJ1rHRF7+PqyIz8AVJRv4QeqgXJSBNAZUhFmiCPq4P5RKy7zon4uVtTQ5ex4uP+YdG/Rncxus43ctg0R+ewrtg1LdeMfPn8M1+YwE5xvs9shyF45LG1wVP2IJkRUpEugMqQjHQBFIZUpAuyuDqMkuuycxg/F3t+JCzp3Nyhls5hWkzLyJnEJISDWFesc64Z+SzjW+iZw/Jrbgg8gkceW2XmbJQGx4yQiixdAIUhGVm6AOpCKrJ0QRZXd3EcIo8inXXOH1cHARifFRW8wSYIu7t9AqHk5ZEJ7FDryLE4LC6LzmGlLVQwI+Ud97X4hmdYNpey8aiyzvccYUbyG2uDY0ZIRZYugMKQjCxdAHUhFVm6IIurO28Y0SHotHOtcXWQcGfAii+0bjERNR66u32eAXaodWQsHl25KjrXrKiz2+dPZsTh6WwVr4c0fmdq7lE+4zDbFrdp3hUG5zYNqUjX9a8UJCOSEamIVORPiBmonBhLwu/NCFK1N4tNM1LkfLXsHlVWOU/Vvds0uerAmBFSUT+tf6UgGakJaAWpSE2ocz0xI3irxrUgpXSebRWbZmSvZc8IK9hkRgZdRQoCekEyUhPQClKRmsji6gCSd691EleHr6PgwwiA4FBoDOBGyH1dihqSR8BnvfeOXQCYN0eD4EM2sxz5u3DOv2pGaiXG7CzjJVbjbG2z6B7lt0vMKXlXRjLlgTEjpCJd179SkIxIRqSiwVURxtUBnIhf69BG/rZzQYDYyYmH0wAQMMDH8QBAxPS/91CPO4dz/tVHe/fXU/xDnhXTGbaV3v1QbB5Vc5yXvUd7s4OzZ4RUpOv6VwqSEcmIVDTYKpqNwfzL4W46d9ZY8KLoLkSnpgPuM1HDx/BTW4rjo9YBw78Z+dTS2bPBFRFd93jkiPcpY+wd8uuZXTDwDsfjWSzjnFjHOQPTU9ELXmXm1pSxQAmsvYFU1D/rXylIRnoASkMq0gNpXN1KoJvOWTchsYRRdIHQ5OKrQOxkEqIT+KndOHvvxqlzbuf8AXYvnt6K3z/hRdQNeZ3zYu+QX87sgoF3OL5xdv6V6BzOiXXRuVfzk6GAqMyMLsJlSmDtDaSifgk9VAuSkSaAypCKNEEWVzd2Arrp3LJr7TD9xY2lOxmAKw+Cd8DrHIDonI9nF+JT1+5hRF1r50TsHfKLmREMvMPx4mwTnBPronMnAQ6fFpWZBH03Tc8gFfXNDyMqQTLSBVAYUpEuyOLqXkyHZh89OEjnTuMnOHdn4SlIrmm18PzWi+E7N/FBbF/nToHgNzMHTfM8RuOJ8dg5rOOcWPd1DiszcTIjPYNU1CfrXylIRpYugLqQiixdkMTVuXR7Tes8RtHhlSeA8MlJyW6f1htsF6/fH7t+yd+5qdPfYu+QX8yMYOAdjm+9poVzYh3nxGtaWCEz0ktIRX2y/pWCZGTpAqgLqcjSBVlcXZedG30p9uQ8c3fdrLi7bs489iwcPHWfg/LdYEOuP4wsx/BTDpgjs+Y5gPMh04u9Q+QzCzDwDsfj2dbOYR3nDEyvRC+IkWRGegmpqD/Wv1KQjEhGpCJSUa8SYu4cFZ1DsHMHB2eWIX9KSv5/kxlpBwVyhvpGRQoCekEyUhPQClKRmvzNzo2H0C2uGGMgWDIOwYHBmf+5Gfkkg8ngInu1uvPTN/hi9U9k9plHuTbgZqSPVKQgoBckIzUBrSAVqYk0rm7ZNBc6jqvD/mHkHMCxSfglM7dN4wxIGBkHP2aTGPSKv2tGHGE6anzb6ZkZ2SprZ0ZIRbquf6UgGZGMSEWDqyIRVzfajY3EV38T5MzEIRYKyDv337EktGdGnEwFD2y7XmaskuLZHZbfTdXRjFTW+Z7jrxZzvI7vyH1sHGQKuXSVOXupD7mmGSmkeKG6usFLtZwb75rJ8o/7OpgRUpGu618pSEYkI1LRYKtoNnaQzmHk3FHzumFGMBhu+ND0kdCE2G7sde7ySAQD43AMxM3wE7dzl8KXoFNUMSMFmyHpUmWHOdsltrfDsjarWK4ZyWccZtu+am3HYdkia9AYsFVhmQKr7DK7zmqv991iuvGneWWEV5ldYJk6q37UwYyQinRe/0pBMtIDUBpSkR5I4+qWw4nnXdvIoSPoCL3IueFrC9cWxsR2Y++a1ugwYGAcjoGLEAtFYGQuvAj/kjbj6toyI5UPDNlfZ2w7X8s0v8eXlxhbzbunVzlP1X3V4ibn6aaDKef4ts0yVbaWZh+qjHHXjDi8XnZcM5LfZqzEG6fdefUwI6QiTQClIRlpAqgMqUgTZHF1EIHg3cmDdw6D4YaHGr8e/HBNK3l8DgPjcAwMm+boHIy4FrQb/v+VkeLeep4hhdWNjbfFn8zIHmvgNyMFhjibJWbb7k6R/IYwI81ypb6rpxkhFekCqAzJSBdAYUhFuiCLq3M5Pn/wzmEwXLNzQz90Dk48cf/yxswkJiEchJGbRhA6RwUzUntbZYLtxuDq7k+3aRr/dkq+ai29xvIl99ym43wUZuT7bRqncXaVZYvfbtNkWZVrcZuGVGTpAigMycjSBVAXUpGlC7K4uvFJCNxNHqxzxrwXOSc657/BBnfGsHM4ZiwOi8vBRrvPGzHoFCXMyHeqOfd1c611qyrWOS8zrK7tfqxvOqzMOW5Vtd+v14UZ+b6BdS3HeZFVU982sBY02cBKKtJ2/SsFycjSBVAXUpGlC1/ZO5ufJqIoil/oTFUYAYcWtSJQUQS1qCiK4Pf31LwYF8Z/wsSwNOPSEFNcGDa6cWegZFh00TQGm5joP+ZMzxud6lRKRX2vvT+TSX3z5tb0nJdc5+NMXFzdpGWYx6k15cLIuVN2RkbOSeXqL7AZ0wTlMCd90L50JlCOTo/QX0SV0DPPE5uu2CbLm5o82ssu0nX9KwXbiG3ELmIXgRaU0x8nhh1vRsrBKZG2bUbYRe20/pWCbaQmpBXsIjVh5TgOPh5e/7z+lYNtpCakFewiNYmNq0sadqq5uLqe0f3kE26NBEl2Wb1Ep28YRDRjGz8/9h1s8Og34u2yZk+S6ulpNhE3/ijU5Gbk38Auao/1rxRsI7YRu6hzXSTj6qwZ6m+mjWz8++JNQpNJIy5A/7A/a8CsP3bXziqHmtyM/CPYRe2x/pWCbcQ2Yhd1tosOpZMZAk0oNyHfhNxFNGWnhhLBc03dw/jVoBm20VuPj8xMTCQvUc8+a0LG22E+outAw8pg2DZGMF/uxTBqYhw1E0Mpe0qOICCvhYQYbka2gF3ULjlDisE20gNSGnaRHsTF1V1dWDBvNaecc5EyM4mh8b49/Qlr8Gw+kR4bJ7s/RrnIrcf3bs8dvDpCzmR6zwCem8J8GV0HGlUG8+PUL+f7e7N5qRxqYlwql88OWgmMICCPz4zsPOyi9vnPiEqwjTSBVIZdpAlxcXXX5q/nrJNNKXc+aO2O+pqkDlz1t2MJOn0tuUAxykW4M3Uwde4KzfqzRqPKyeg60KgymEt15eR87MUwamJcKjfme+YoRhCQ13Iz8uXtr3wRv1J87b58L6KUV4Jt9WPcEzJt2Yywi3SBVIZtpAukMOwiXYiLqztwhujI8e0qdxS/4OjC9O0tlLs7d6974SL1YFZEuSMU0rhy0jQnidJ39+2V86EcxlET43XKYWT/wT9pRt7GEdeMFIVY/PRrM1JCh+K1fzPCLnJ0gRSGbeToAqkLu8jRhbi4utzlvrSRbfqc1mTCGs+FZ56I9o4N0u8vsJ2Yvdo7e7JeudTRMLqOQKPKIEF9h+T86Dkt1MQ4auKcFkb+ajPyMdqMeKtVUfJjUz3xbMl1P/nNSNndfP3UrRQLi2vlRX/In+a6G0EzUii2XTPCLnJ0gRSGbeToAqkLu8jRhbi4Orpg2seavNvnvrwn5w7RlH1pKEF07CaFyu27cf5yb90FNjB7feB8Gr9yGG83aZky3o5Ao8ogY9hdhPnYG1UO46iZGLpkT8mZf7MZKWxEL9M8XhNi3f9UEmtF/1N5pepWa2dGiqteEL9aXhUfFz1/yvLmWrHtzoywi3Rd/0rBNmIbsYvYRSGt5MEsHAiVA1BuJ0Bl0ORTUvHfvfPNSCm/ErAUnhlZqohPi+7z9+Kp54+UX7ysCjQjQW9ScN2HYqMkfJbdYhtepmEXObpAesE2UhPSCnaRmsQlxFw0TXN2lCQTuxpuoR9SXnyGB4n6LHSLl4xekswYwcxsxjavUwTMx7Fbg8rKNiPecil6mSZoPJ5XRakgm5FXH0o/mpHihvAehM3I+w9e2zUj7CJd179SsI3YRuyiznUREmJ8Bqxm4uqgHMA7lhtzZoYGsH+L+WaNNP0PWr9M4xXrmpFCUTx95n0ohJdpvMWKqBSwb6MoSs73yzTFJa/dmhF2ka7rXynYRmwjdlFnu6iWbDs8so0gf6S8HDBnDXMAWSzdu4b2Wf3RO3xGa00nEl+Q44L5OBYjuDyGCv+UnX+0d80Tpeer7wu1G1g3yytifbWyvupWgmak7LobT/xpL3EDa3Gt3ZoRdpHO618p2EZ6QErDLtKDuIQYn72j23ur0D60hWHKS/e56XPTvdE7fI7WPiHxBTkumI9jMQLlUIH+GpzAuvOwi9om9FAp2EaaQCrDLtKEuIQYoqxNLSqHLJbuLv/PNYpwtaYcHrJGjktUOYxAOVSgbcNv7VUHdpEukMqwjXSBFIZdpAsxCTE+3d2tKocslppyXQQi57SgHBSKKoeRYJtBvsu24GZEMdhFji6QwrCNHF0gdWEXOboQkxDjY2VbUc7IhikvUA4X2CR7g7t9kPgCnTC/TrnLfYOHwnyXbcDNiGKwixxdIIVhGzm6QOrCLnJ0ITYhJmnSdpQLU15O2RmZ8gLl6lJhzmZs4zoSX6AT5uNYOXLr8D4zzHdpHm5GFINdpOv6Vwq2EduIXcQuou0o1144MajWjOR9FF7/7KJ2Wv9KwTZSE9IKdpGasHLcjMTD65/Xv3KwjdSEtIJdpCa0JaP7t9i2F04MaEa+vvuVryLKpgioLrsvP4vqR/EdbkbYRYpCesE2UhPSCnaRmsRl59I5w+5u3Eb2NMqt3WX1hhVmbIPq2WOYZi+BJhJ0uw6ZB8PCQTnzLIGYb9+K+qOyZk+ypWbkXRwi5NOyKLwRAW8qQuC1eJJOa0bYRbquf6VgG7GN2EWd6yJk554YSqfHEi0ol5QVEKDfTFBu/A7ckHzASpNk4hrRTigHdv2NZsR7svRqXQS4m8FfXz91K+tL7mpVFAuLr0qd1Iywi3Rd/0rBNmIbsYs620WH0if2jI9bfY2VmzCmwxTcKTs1lAgeo+4exi+CCqFyIyP1AuEWY5mUO3DQ3JuNJOhGk3UD5SgziRzdnDk/hjbyN98Ohm1jhHAU9mIYNTGOf2diKGVPhSP751LG9FYJrI2bEVDIV/Gh9OhNcb12ZuR9UXxyRdH11l8/66BmhF2kb+ihYrCN9ICUhl2kB7HZucPz86eooXLORcrMIAU3YQ2ezSfSY+Nk90vlUEEqt3t33TmtHJSTSbmpK5Trj+TE1CXrBn8/cjvM0d19gUDjbwfz49RPOMrfm81L5VAT41K5fHbQSsiR/T1nKfeHZ0bKT/MVAZ6Vll56QTPiloV4vV57cV6ls5oRdpEmkNKwjTSBVIZdpAlx2bl9c7k+a6ChcueDtg3Bc0Ei7liCTl9LLqA9Q4WG57SgHJJy8fqiiHJ1ybpQDjm6EeUafzuYS3XlCEdhL4ZRE+NSuTG/6lE5sj/zx5dpPHdtY0V8Z2Wzo5sRdpEukMqwjXSBFIZd9I29c8ttGoqi6GljBwJOGgJOoeHdZ6hUFYrom5eg1EidAXPoAOgAEONAqCh88IUyPCD7pkoqJ9iGJuc4eyEKin0dqXv59sp2dq0Q1537bEnk4XKS5Bbw3bm3u/YGyeEIQ5ObKyK/QclhK65poUe3J7nB7170/RWR8OBaWTAKyeF1HBOv9yWHV2Zv/fNi5PTkW+s7/ttuHR2fHP/8PLm3aWhRZAVRDDWKrCB6oUWRFeK6c5/44fXgwdBrWitowcVVJZHy/ev4jrgjDLrBhnZcl9yNfZmf6W3Q7W3WxdM+6NHtSW7wu4OCVBqCUb3XtHDM7tFuLHSvaeEVJPdvH+398vOoy/dPHz/+OPr2dWIfYKVFZs9/VVCjyAqiF1oUWSG2O/duUGsO+RzUobcmrgW3WduuF0QWXwuSc0eIucGG5NCOi+Q6T/v0NejimEiu4e+uCnp0e5Ib/O5gzqtNuVHY2ptc92grgV8t1LdrTbdnssXIcFqDN52eTthHe2mR1fNfFdSIGtEiWgRik4tl96ZLzoHkRgXeHST9lFTB+88NrFyM0KJcnv+qoEY6EVPQIp3ENsS888oL0mXpUv9X5IdOF/S7VAKsFre9q+J44l0Smd3xa/sCsOf/B++uejEyqaVntMgAohdqRI1o0eRahH6X4p2wsjcvjsXLvV+RXILiFzxEM9Oo9u+ZHb9DKPHwd9PogRZZPf9VQY2oES2abIsa4ZslkfWbw3+rEDpd0O+CnpXpS/VrwQye8DlLTtaL2Io9caMLjSxobVFHFEu7daSGVlv5YoQWWT7/VUGNbCCqoUU2iGuIeexdf7nzYnhyeFgYi0P0rExvrG2sXcUTPmfJvVwPsRV7Ijk0srieGFUMrKv70D5WQ/tE/2KEFhlBVEONjCCaoUVGiGuIkQ1/d/t58uTQszI99fsP8nbM7tSubLqt/cnNnbW2iDaiUfI+G+oXI7TICqIZamQFUQwtskJMQ0yH9WLy5NCz0klu6twNtqulEFuxJxpi/mw4S1Eb0ejI7WKEFkVWEMVQo8gKohdaFFkhriFGKnIQSJLk0O+CnhUkd/4G2+4Utnb2REMMk3PkdjFCiyIriGKoUWQF0QstiqwQ2xBzq+YX/5IcOl3Q74KeFSR37gabrHjYij07DTFMzpHXxQgtsnr+q4IaUSNaRIvAkOTyS6P8m1I5LaVRD2iIKWiRDovKJcsWUSOVFlnTiBYliljhj7QJS65DOf0IfQNUQYuUSEGNrKFxaqFF1tAoRfq3uDcb8zXnaAzC9vlPi5RIQY2soXFqoUXW0CiFbYsGMP7kVM4YJB2TYBE1MofGqYUWWUOjFLQoCfvpR+gbQFIyCRZRI3NonFpokTU0SkGLCCGEEEIIIYQQQgghhBBCiFY2g3pT0lDy/LIk5vCVJ1LZCrYqaQZM7/n+shAz0CIyeougURaLqFF+6VjEycggYX019B+nSq4iKTi454ncbUrzbpoB0xtCDEGLyMgtgkbZLKJGucVZxMnIHitbIs3mxSUnBU8kqEo1SDyAyZmDFpGRWwSNsllEjXKLs4iTkT2eLYm8uCYpuF8u76dMbkfwN3lyJe+wIsQKtIiMwSJolMUiapRbnEWcjOyRPrpHMuMfXHByM6G8OxRiBVpExmERNMpgETXKLc4iTkb2yHBRC5ecLvSaFv4hVqBFZBwWQaMMFlGj3OIs4mRkj/B+Id3jPvPzMj+3mSo5PO2TZkBV5PZDIVagRWQMFjmNMlhEjXKLs4iTkUGWg/qipGDV92spBjx89XTvLT4HlWLAa8+7VRViBlpERm8RNMpiETX6xd7d9TQNhnEcvmXtamUrUCgwNkBYZgYzOrKoLCESXwLj+38hx+KUMxNPbPG6Tpr09P9Lj5rneb5WFfkYAQAAAAAAAAAAAAAAAM/KqEzSdgx244+c9IKK+EVF1JGMGmo8raLYjrz4y+WqABWhImpBRk31uRdLgw9JFp+m3b1h5CfJ8SSWNhbZ68FqqdlGZO+7ZXveuY9W57zc24121r3ejuxd1+WFqAgVURMyaqph2tm5i8iLKLJhXIwiH8Vtb7XcUVX0q/VyJzG42a5uitbDOBaz6mgrvi8i2wlQESqiJmTUWNXBxpcXj8tt9tO0XEQ+iaq/Wm4UUV6ulxvH4XVEdtrKIw7nV6/SNLmO7C5ARaiIupBRg33srZY7j0d5a73cLCJpXZYRo+Vy7TjoxfLxc7lpLD2+BRWhImpERk10Nom431lOFFv5JIZnkV/Ebe/3clW/qKZPl3sYx5tZtT+O6spyqAgVUSMyaqr2UZnMi/jWyeLwOEk213/7rJeLwX728ulyna/lfDdOs7R8azlUhIqoERk9G3kRoCL+ORUho/+Y5VARdaAiZAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8YO9ul9IGwigAHwgfIaYIhFAkigYEBESLBaop1IJaGnVq7/9qaghgabUjtDa7eJ4ZM+tA/HMO8s4mA0Qkp/NTPMaOattYTiIPeqXYImKLSAiskcBOCo5TiCFUwCLFNfGUr8fAXyV3cOpY2RSAomUVQdILtEXhjqZpTZDsAm3Rx/sSdSMg6QVao5Y6HIZBq2g5l6bxYfe35Mw/JXd6iAlz1eRqvZbx9SMw0BuNzAAkuWBbFB6B1kCgLZqIV0CyC7ZGatZQciHQCmIOPHa3ozmoRbV+GFDcq0Q84WragZenO9CdNGAeW3sXfprxTlez1fRHLW/HncwG4K0LqSNH34VndgoqieGoBZwnrIqXXD1nZZOY2dWAwgC4egeSXJAt4jCyLgJtkUfpKCDZBVsjKwbUC6AVtCy1lgT8MfJtG7vDfSjuqGxMxshJclutz9YHDDKN5KmfHOKHgOocoJyrm3nNhmrFjPjeuTmOwzM75SrXLJ+N0Na+mMedPLbfNcxqCVP3vwJODIhpIMkF26Kw43B7bQ0E2iJPJQ6SXrA1smJAxQGtwlb7na1NLyPf0TEUtwk8JHcCZOuID4D8z8mNgJMhgFIYahW4yADtSQjzU04vALtjVkpAuZtHJg+kOiZ8u84J0LGBpguSXaAtaqfMg+ElSHZBtsjD7fW1EGiNRmflZq4LWpH9puQnF4tbTnfkh/aQXBNQx9BrgP1zcmPgcgdAsTpZH8aBZgee2SmZGmC4jWoRwDAPTXMcp9vARLN/Du6MrJOgWuSrn4HWQJAtOtHKoLUQXI2SpWFmnAOt6iLiJ5fbNnD0eHK/j5Hj+Rj5RHKzMTJcAoxuHvoB5pTEAPcKh7xnZG0E0yIOI+slwBZVee/R2gj0n9G4BFqB/b6Bz4UqPiRMYBhCbDhNzujYC8kNMo3W6S/JmXt1861mP5Xcoa6Us94FthP/AltcweYGPI3ce9zz/miKl/vlF2yLNpKI9bnDLr1gWwTD4QdHrINga9RMmjWrDVpBI9vX+tUWzI+OhV5C20pPk0PYcg4ekpvcerzdwUJyaMedzD6eSg6VvjVKAqHprcfvdS03hifsavcAFB2HnzMiv2BbVLI0fRsku2BbhMsEaA0EW6NeX4t+AL24Gl+uxBaRANgiYo1eKaNmNt4dgYgtomWwRSQi1khWxo42VFsgYotoGWwRiYg1IiIiIiIiIiKiQLiyAInLlQVIYK4sQOJyZQFicsQWkYBcWYDE5S7tOhAuHtPT9Q08bdvAAjUB00pjLqJgwo5qMcjGlQVExxZJAMJjjSQA0bFFzyfUMGLubX7O4WmJJBaomd0vkcXkpuKvIbkXIf/rny2SAUTHGskAgmOLliDUMHKyBcR34Xt7mo0cYTsSCcE/5qPdSDQFFIvz5IqV43F6+px6JptToHmp+T/Y2IkeQxquLCA4tkgGEB1rJAMIji1aglDDSK866JVqs+S0NlpKrpxMbPrH2RipqvPkemdbofT0ObrRvl5IbnPHQFaSrzQYvHnjygKCY4tkANGxRjKA4NiiJQg2jAAPyRUA7KtANu8fH9nT6qWLobT/6CcV2FtIbsOKRnOHkIUrCwiOLZIBRMcayQCCY4uWINQwsrintfWM5FqtWXL78+QKs+Tk+rJgVxYQHFskA4iONZIBBMcWLUGoYWR+t888OUUvtxKb/hGI2MDCBbYeEEp7j873tPpJw4oB2X1gM9GAkoIsXFlAcGyRDCA61kgGEBxbtAShhhFc6vrGQnLenTxXsyMOM4UUoKqLyU0frWfOcgoudtLRGHCgR1OoRSPvmpCFKwuIji2SAITHGkkAomOLnk+sYeQ1+6953ayOyYnMlQVIYO7Lu14J30Yk8twC3Mzdzn2bu5v5/k/c/e4axGGEAOneRf4FDiNic18ah5FXwP2D1YaR25vr22/fvcX96tudv7q+vZuubh5b+SfMV3d3k9WdZ7LiMMJhhHzSvYv8CxxGfrB3JrxNA0EU3pIYKPQikJamiKvc9ylucQoRx/Kxjnel1Bv//3/Bjsd2MdghMSqsw3wIeKzXg9R5OA/bDGYzPGoojPwHDGfQLIykG9JoAUEC4wZQq0aQN3xUbqo8D9TIA1DVhJGHH7usYOWY/uEUqMqBdGun81m7T3rdhjN16+vPBs8qalIYMQpyUQtgxkM2OkL+mzBCLqqmWRixR5AosrhhY/CApVo1yk8olM4ejmtDGEFVG0ZuHZ+/c8cPX1XudBvN1P3zzmFNCiNmQS5qAcx4yEZHyH8TRshF1TQKI55tO7aL0UKf5YGCpTxuVCh7ZLsl5bkjfTJULZTNKun80rkb3Qfsx+m48E+tj13Arxf+I248q9FM3fr6yIVe9yLuz+sgp86s3cjWsWZn+1zvNq5kU3+PaFwdhZES5CIanVlANmqTjexGtC6MkIuqaRJGPG/ouCMbUglstR1Qdro0S41KynXtkTMa6bK5mjuMDF+wwZMfp+P2L++z3iZ+vXDWLpzVcKZufX3k9T7bzPbro1d0HWR4q7+6hetZ5+wrZ9c6uIJTf+nOyN+AXER3RgrIRm2ykd2IJQgj5CKgURhxh3oPhhHbwZsfOlBo5dUoJ61dUu5IF3EgjKBaIIw8g1BXmo778P3xNyzvHGPYuYYzdevrIy/PrdzP9mdHkecQX3E969xl/btey1Z2BvSY5i9BLqIwUkA2apON7EYsQRghFwGNHtM4Q0+HCRcezjjw+qkHwcP19He/WjmgRiWlc4wuCmEEVZMwUkzHvfTmwRdWcU+ryUzd+vrHLesWY/2vZ9az/dg5XEcf4Hqpc7iys0th5C9BLqIwUkA2apON7EYsVxj5r13UJIzYDpC+yZpu0UtaaOnPrTxUUBbVYo9pbpWm47L1y2cr3vZpNFO3vj7SYRt72f7SPa20c7iONfGeFq5QGPl7kIsojBSQjdpkI7sRSxBGyEXAEQw980qqdqkomKuaMHLm47O3p8tv+3zrPmCl6bjs+icMb/msXexco5m69fWRQbe3wnB/erTUOVzHmp3tV73b2c4j6ZxXUNWv0toRY/6EGHJRC2DGQzb6PfZ8jGay1H8zIheVEQUHizKtIC4IF0bkjNhssHOVvDmPnSuFz0bU1q+h25kj/gIURoyBXGQmrF2QjSqgMEIuWjyM+J7jR2kYkdJR4QEQKC+If1F+rgI/CNMwotciMdVEUcDDGMJIEPAoDCGMaBWEGlAyEJniapyrIFdSJWkYSVVNGLkz6K2/YDk3Thz27/RtprlwlrGNNUyLr7pF3nzShZ2rXcuCpTJ4FlYosbJn7XZYUaJnPUYF9Y3pXA6FkRrIRRRGMshGFEbMg1xUBsKI5FymYURFKogwbkSaVKkKJaMkCNIwIoNEqTSMhFHABYYRXWaMYSSIJkmoifSajEAFk0RxkSqZBJNUKRVxmYaRyUSrmjCyeYl13rKc6yd/DpOrG6waPLjQgdU9a/u51c9d8p79IRRGTIFc1AaY6ZCNfguFEXLR4mHE8yMXw4iUoZ8FjyCWmVKxDDIVcgVCRxDhp2Ek5kqrqUYJFXkhhBGlEp8LCCMTUHnc8PkYFOcRz1WAKuFSeWkYSTjXasZjmr1+6Z4W/vhp9Qxj563nXWsLp7AcO7F9Zm0T3/ApNQgffeEEl61da/0KnoUVcBIMHl3Rvx7cwmr3rdeXdYxsAIURMyEXmQ5rA2SjmVAYIRctHkZclzsqDSO+r1xxAHCuo0WqpB9ka4qj0hHE566YahFy33fH8HRGSQ4RBJY4POwJ41Ar7k6ECFPlSFACTpiMxz8oEXHfc4MkDMcR91ytasPIi5esonPwdcbmZPNajj198PTB6cM3fLJ7WvexczjBhZ17x+5v4llYASfB4FH49dUvWA3fDzpymo+rozBSA7mIJrD+ANnor9qIwgi5aFEXCeFEQrppGNFZI/APAC8+iDiqMI4kKhErUNOpNxaRglQSe8k4klMII0EUSaFFyJOES3iBVauI8xDgUcQlCOGrgCtUgeIBiMSXMoC1ccInPFC1d0a2undndi6f73JsRX97z4CKGIkTXDCR/tg5/MfXeBQ7h9X+fefozkgzyEV0Z+QQshHdGTEOclEJIUYw9SPSYSR2pJRueKBxgyDwDgBHKYUBxVVSpWuhI1XgT3UqSRyuj8Y6jXBfKj+CMOL6XHnwAqtWvvRDAJQHYux6nHOByucSlHJ9KUGJiePziRzXhJGzgxfsd527Cirt3Ep15wbHsX91ncOjeE8LqxnbuRwKIzWQiyiMFJCNKIwYB7mojFCuEJET6DAiPB00XAFxQ8eP2Au1El58EPuodMLwY63GXjwNeQhhRK8JLiCMyDAMonAaC0+XSt8ZEb7SahyGWklY0yrwVJLIMShfqwko5UYikoneptU4kHWPaa5+ZrM6172Sz3fBzlU8YMNJMNg5fU9rfxPPwgo4Cabo3Pm1PlYztnM5FEZqIBdRGCkgG1EYMQ5yURnBXc65lELASyEaeG81kpFGgOIlNRb50UToMBJwUBBGfBVFYSimccID2KfDCCqIG1GhlD41iBJQE72ESmVKSFyrDiNPnlmWtfVr5zrW6p51k7F7vUE23yXv3MmT5c7hJBjsDb7tg2dhBZwEk3Vuz3pzl2E1YzuXQ2GkBnIRhZEcshGFEeMgF5VoNPRsmv88jafIodIhZNbQMzFLifFCQ8/wx/+Dxf/8V6w1Y9kmMJOLzIe1C7KRSdDFqBUMZzKqwPkn2NQ5CiPV0J//5f0UyaEwYjZDs6GLUSsYzsD4MLKxblnXShNi4Mcj6R+OsTOJ4VxQGClBLmrXp0hOC8II2chc6GK0BC4yPIz099nGx4oYeQSdwydyJjGcCwojJchF7foUyWlBGCEbmQtdjJbARYaHEc3d1/3azu1a658Z23l5rvuAPV3b3e6wC73uxdL/tPzrHny3B8fb4XA6HFeHY+ywghEM54LCSAlyUbs+RXJaEEbIRuZCF6MlcJHpYWS/e+pLfYy8w/prW2zn1GN2/8P2/hW7w17vs83S/7T86x7sHI63w+F0OK4OYyRW+PfMPfSQwkgJchFNYC0gG/0vNqKL0RK4yPQwwtiVQX2MPGZZpy6xnQHDWS+XO+zluZX77JCqPdg5HG+Hw+lwXB12DisYwXAuKIyUIBe166+0OW0II2QjY6GL0RK4yPwwor/KdZ3bGZxl68fZzu5hV/pfz6yzQyr3wAA77NwKDqfDXmLnsIIRDOeCwkgJclG7PkVy2hFGyEaGQhejJXCR4WHkzgbb+rhV17nTu+zxs6wrH9bOwv2qDtvYKz1gq9gDA+yyzuFwOuwcjrHDCkYwnAsKIyXIRe36FMlpQRghG5kLXYyWwEWGh5Fb3W5vhdV1rr/be/Uo6wp7uvZqe4sNcH/+gK1qDw6ww87hcDrsHI6xwwpGMJwLCiMlyEXt+hTJaUEYIRuZC12MlsBFhocRpKZzZfbZxiqbDe5pDcMF+cuzmJ0c4//8k4vawHf2zrSpiSAIw4NJUDFe4YiABwiFUBYeqHjflpqdqZnNfsmn/P+/Yff0bJIRRjaHOBP7KSWvvbMTTb9WXndDK9KCbfT3yDzm619G7KKxDKAG6AGmJM9zJTMFj0UBK6Sx/8kNCFX0EK2VRtXvo4IHoFTdrtHK9LqIMcr0rcpJTRtG9ur1KyKAtyYZOmPCYQRgF3EYOR22UTI2yjz+2zDy/7pojDCC2DBSaKWMDSMG1hQ2jNhFGEasKvoACt3DMIKnUxrJizzXXaeMCYaRnXfPvHF14wytu9iEPh038etRq/7Px9gtDeV2Y2mRw8jfgF3EYWQA2yhNG2Ue8xZG2EVnUj2MSGVcGDFKZxRGdKFcGFG5VhRGVKG1DSNK9RSFEa1RdQFlIMF0SxUOI3fXnwViZIXOwauzunX90xroWv2fj7Fb8n5vHEb+CuwiDiMD2EZp2ijzmLcwwi46g7HCiFRS020aWV4ZwVTSQ6TUmS4wjCiJtT4gUdnbNFIaaSNIH86QxVCFwsj2zwt+56oPraNX52gdHu9R52Y0xi78jARp2uGgtQJHEdqN6u73VltbaR1Qxe3GYWRa2EX1RxxGCLZRojbKPOYsjLCLzmKsMGJyJW0YgbLSNozkhVY9oJC5URJK/Z5VmEp6CpYpUF1Yl+O6LkQVUxgF8QSP5qACYeR1ze9c9aF17tU53nt/fP8BdW42Y+zCz0iQph1q9J1XFtqN6q5z2fZys0YV2m2qoYccRgB2kThMaXRmSQphhG10Lsx5GGEXnUn1MGJwQWbyopAoFCSPAksSb9PkmSTVpxpeGSk6CgDVhZrWCm7TwFHYU/WdCoaRK3eF17nxhtZR54RwnZvRGLvwMxKkaYcPdNRCu1HddW4LvLRLFdiNb9PMAHYR36ZxsI1StVHmMV9hhF1UgcphREsIJFLbMGKMUqboGVnAr4wNI7BC5hhGpIFajmEkA6UKG0ZyVPjNNBBTeiOqd3oY+bHW3Pz80etc1aF1J69pzWqMXfgZFxuNfbeSdqDOUZ12o7rXOVuB3TiMzAB2EYcRB9soVRtlHvMVRthFFagcRpS0h9yVEWN00dN2JYYRI+FRYxgxChWGEa1AGFBdo+wO3a5TRamKIvQBVj9GjjG07uSnfWY0xi78jARp2sG7pmV3czuLld3ymhZVOIzMBnYRh5EhbKMkbZR5zFcYYRdVoHIYKSkG9EYof9Xv409kKLq9XtcBv/DVhGEkPLTOdU58azavUOdmNcYu/IwEadrhoPV6zeucq4v9ZuNGbe1166BcmcjbyLz+/WcX/VvmJIywjcbkf7QRu2gSssmRfyY7oToVJ8RUH1pHnSOgc9OMsZvm3HpNBKjV4/luumokG0bYRdEj0oJtFCciKdhFFZlpGAkzbRgJD6R7PdRH9Yt/ZYwdnRtf5/4S/0kYYRedO6m9i7CNIkUkBbuoIjGEkeeNxiNvXF14aN2Vg7NGyy28uCbW22IKGpZVESbVCczVSDSMsIsSQEQP2ygBROywiyYhhjCy5MfI0Ndqo+UW3nzFzqVCJ0aSDCPsogQQ0cM2SgARO+yiSUgrjHy5fFO40XI0AI4Gz41+3Hjhy0XoHA2bGx1LFymdGJnzMMIu+kck8C7CNkoBETvsokmIIYw8v7rxvWKMXLjpYqQbFUeD58qPG9OK+9vrbRo2542li5BYZ2cmGUbYRQkgoodtlAAidthFkxBDGLkhFt8tj9s5GgBHg+eEg1Y8uLvepmFz3li6OOnESJJhhF2UACJ62EYJIGKHXTQJMYQR4M722J27j4q+vdrv3Oqdt20aNjcYSxcvnRhJMoywixJApADbKHZEArCLxiaCMHJtWdTe7VTvHI2WowFw1JvyBptb8fhNm4bNeWPp4qQTIymGEXZRCojYYRulgIgcdtFERBBG9pv1xgNRpXO1xuVNXIqj5WgAHPXGv8Em7nXaNGzOG0sXJ50/YgbIAXqAmhw5LtH//WcXpYCIHbZRBbJzItlx8OyiICYw570CeUVMNTIRokrn5pGzOqdkpjiM/Aa7iMPI6bCNOIxEB7togB9G7JubDSNKZQozCSqpTKm0Ga3BCRprOaCx9JtSThkDCtYhekSpUcVhZJIwIqXmMMJ//zmMVIFtxGEkOthFQ/wwglAY0UrpAlEoc6vwLW5Ys2HEYI7IAa2h5inaTmoKI5qSh6+kNAMVCiOL9dZKeFzd0r02avzqT6m9iP+T0HETvx616sLncr3RgAM+NOrOjb3zWNhsrJcb43aNp04uhWbkhvHP2m4sLU4VRgyHkd9hF3EYGcA2Gs9GHEZOg110Ti7yw4iRLoyo3IURaWsDNay5KyMqo+AhtVQnlJIURuABfhjjKQVHDdVUOIw0j8T1QIwMvnYn/6dlIjzRLnyAbsvdaq4Kx95HJ6bsHHFxms5JqTmM/A67iMNICdtoPBtxGDkNdtH5uMgPI1JStCgKUNIUiMKaUzKzNVyHCuMGACfSqSo/qWRuw0gGNQMMlZawnR6qQBhZ3HAi0Lm9+iNIf/X6ghAHrZW1Gn5f04Xb9IocrcPjPeocfQDZa9CSXbV0s7knxA2YYLdNo+5o7B3tSUehc2JjnwbbHTbebLkYGX524narflfQWXRUILQn1V3namsrrYOy0n61AptWDCPaSMlhxIddVLqIw4hgG01vIw4j7KJzcZEfRiCJKElhxBRaFkimjSIltbG3aWCd0rCuyI0CYAHkDantrRZfKSUzUEZnoKBuhkrrTKIyVgH69DDy4e3bxtdw5zovxcZRbW3n2uXrteby06y2urUjWtfpFTnee398/0HZuUuXvGtah65znf3VyzfEyntxeN211HaK9qSj+Ov738rBdpeOBRF+duLNDgRgOguObmeuc7Qn1V3nsu3lZs1V2ktPxWGlcXXGZDbGcRjxYBeVLuLRmYJtdM424jDCLprURV4YMRlmC5NDzEAlc0weHQmgwrc+W8t1h47mWJL2xo62yviq45RRLm6YodIStxsqFQgjH998Omw+DHbuOca23UsC/swf4OtWTTz+uPhWlJ0TwnXOw4uRL2zU3FwVyLBztCcdpc7RYDuvc6FnJ16tLBwKOssdtdCeVHed24Jdd12lvVH5mpaW9m4XhxEPdpF1Ed+mEYJtNLWN+DaNYBedk4u8MKIlBAe8T1MYWRS5vU+jIZyYUhWklKvleSbxXc/gaUprqXNfSVJGkzJmRMlMj6pQGLn1BF/9Kp3bpVfn3ttH34R/TSvcuY1F6l+oc3SUrmnRYDuvc6FnX2w09oVY/X7zqqCzqHNUpz2p7nWOKu31yp2z2YPDyG+wi6yLOIwIwTaa2kYcRgS76Jxc5IURJRUCYcQqrYtiRGmpAYM1Ui6MGAN5Q0uFtfxUZegEWPkHFQgjh++urda3/3hNa7/W3DksryoJcXVr2fu0T/AG27try5uuc3hNa+c6jbqjztGedJQ+7UOD7bzOhZ6dqIlrm4LO8q5p2T3L3VZ2y2taVIHO8dCzqWAX/WLnXniThqMogB8e3aJ0CCxQi4/J0Cm+FV8wo8ZHtNWo3//TiN4/EfIvtijqve35mWyL7cTkHpobKKfR4TLyA2P0ZzHiMvIdU7S7FO2+9Ozr8vvX5e9s/Em+f/7i/PKnFFmeBL1rv7jb54O73+YdMOnNBg3g2mu4yeFtGLbgv8HmJvfmUjdwk5O7faTqTmrv5N90k7sQnN6CFNutTW7To4ths1dzvyVHVyfn/h43wqDTGMx6E3fmHz7/C10Tqvf8Z4osgHqM0T/Ci1HFU5Rm+Oj79LckWzfEZDo97yYnZHL/jDy6KPQpKf//x2XkjzBF/GjvBoyRlRjxYlTxFKUeg8tIO5RtcdZswXnY3Mc/IY/OZUQ7pkgn2MIY/S1cRiqfotSjYBl5GgTB46ONdXVufq2JK5vbTCrqdiT4oY9d4TKyO0wRl5ElxshojHgxqniKUo+CZWShE+YU+ee20LmD5iSFcBlZwxRxGVnBGFmMES9GFU9R6tGxjFy8nDM5KZiTsjkpfavvD7rhOf92Y6mWc5VwyhXuGeIysoYpWmLp2QJjZDFGvBhVPEWpR8cycnCUu0bWum44rh6uPr07vdvyK+qkWs5VwumXFMJlZA1TxFdGVjBGFmPEi1HFU5R6VCwjox6KT87Vw9Vriz8v/de0XO9LNIQJSSFcRtYwRVxGfmKMTMaIF6OKpyj1qFhG6vWtJneMhR+Tq22eXAwTkkK4jKxhiriM/MQYmYwRL0YVT1HqUbGMhKOik2uO4OrhZHL+G2xSLVfiySUOlxGmiMvIAmNkMka8GFU8RalHwzKyFyBvclIwJ2VzUvomk/Mr6qRarnST+++gHVNkANRjjAyAdkyRAciWN7nySqyAKUyRTrCFMdIJpjBFOnFy5Z2cJkyRTrCFMdIJpjBFOiHLtNmrw6ur80rr8urq/KO1x23EETRLrIB2TJEBUI8xMgDaMUUGIMPNQb9/pZF7t089r5HOP1qbv+HkKvL8Z4osgHaMkQVQjimyIHNyZ8bjsF1kcq6uLg4O3iwL6aZhPGhIgZ0cXb0ZufZ6H3Ek50u9nZypBbszfw9TxBQtMUaMkTpMkQXIcnE+v40t1sib6IcdKaR7NRiP0oYU2MnR1ZuRa93jURzJ+VJv587UI7EC2jFFBkA9xsgAaMcUGYAM7Wd32mFni8nVg+DsEaKh64O50pACu4zXtLrXL8eRnC/1du5MPRIroBxTZAG0Y4wsgHJMkQXI8OQEOL5efHLR8BAHe4jin5M7xkLW5PqXTiM5Xz7EvThTl8QKKMcUWQDtGCMLoBxTZAEyPAz6h+GoyOSkrq4V48EjN7lX4eEobUiBnRxde4Oti3vzSM6Xybkz9UisgHJMkQXQjjGyAMoxRRYgy+WwN0GRyUldXT/uze67yWEazgauwE6Orr/BhqMkkvNlcu5MPRIroB1TZADUY4wMgHZMkQHYpNjkfGO0z8CwxAqYwhTpBFsYI51gClOkE7K8bx5cxdLJ/q++tiZYb4I5aTZb1lphyjM5TZgiA6AeY2QAtGOKDECGvUv99vNxTl2dfM1sgjHXClOayWnCFFkA7RgjC6AcU2QBMrw9Ae6fL/Sa1usz3WVPjHS9SE+MpVaYMk1OE6bIAmjHGFkA5ZgiC5DhQfPw1fxlocmh1l2ukdL1Ij0xxlphylNXpwhTZAG0Y4wsgHJMkQXIMg1OZy+2nZzreomGMNcKU5o1UhWmyACoxxgZAO2YIgOwwf29rScnXS9RDHOtMKWanCbf2LsbpiSiKAzAL+6uoCDIKpTKIH5k2qRNVlZmmfYx3a3//3vCzrVgdldJWTwH3qeZnWmR2wzn3d3jAiemSDtYwBhpBwOYIu2QpY7vNYxeOZkE42e99CtnbirM9FROE6bIAKjHGBkA7ZgiA5BlLY7mR6pcEC1sRE9lEozMepHKGZsKMz2V04QpMgDqMUYGQDumyIB7TYiZRm4sksLpP/6ZIgNgC2P0UHgyMmvMZf85Fr/S2IywGcnG4//hU1Q4NiO6OT14MjLL3Zm6ZmTzUc7WztQXNiMPjinSCbYwRg9jupoRpmhED9uMvLgIAZzUatXR2shFDAkDeOVa9Xqd4zjEsIUwiqpIS6+WKf9ZW9HivIrjP7nNVDcjTJGzAooxRk4PnoxmMkVJyuSakf35EGj1Gp/b963c/L91glTl6hDjrJwo6zj+k9tMdTPCFDkroBhj5PTgyWgmU5SkTKwZkVf5eA0ob45Wub3wCOiEYQk4iFfbQXUbmOvIK+jX8ZXrdocrJ8/ys3ZF3mqiE4ddyNxdeRRisVnbk/2+ckF7NT7A4CzfCY+rm/VmhClyVkAzxkgPnoxmMkVJyoSbkZO9jyfbT0eqnHuL9eOgvVNfaAS1lZdJ0OrtIG7IK+jX8ZWrVIbuaR3Ks/ysXZG3mjjdQcNP6O0/upUEEG6/tbAs+33lkq2VWjA4y5d3RorFFOn9lfYmBpoRxkgHnoxmMkVJysSbEWDEyr0G5jq7FfRfo08VoBfgxfn8B2nn/Dp597TkWQOzdvNXE+9WS4d+Qq9/VLwBypuy31euB1R2/87y5ds0hWOK9F5FbmKiGWGMNODJaCZTlCq14rdpBl7rXXk1Nz8cfUX6nlZ+5dbg5a82H0X7QOt7c8lP6JXK+f2LV/+a7B+q3PUsXzYjhWOK9F5FbmKgGWGMdODJaCZTlKRMuBmRT+mMfE9rP6jtHF7fhQKWeiupT/tkvcEmzxp4ZfNXEwHqG35C7+A9Lamc7AdWd6/vackeNiOTwBTpvYrcxEAzwhjpwJPRTKYoSZlcM9K8eH1WxdfRvwf1w38+5xtwEL9vB8CTS/jKyTpZb7DVAXnWYJuXv5pYD+MSZO6uPDpYOb8f+7VoOWi/jw8geywf/1lMHP9MkbMCijFGzgroxRS54iXjUMAE1g+PfeWEVO5uZLUcYZDfCk/Ht+nSjDQjTJGzArYwRjrBFKZo3JJxyB56Jltvr3zTVupXPUBfZwWo16RbfB9W4R2HZaAVXZwtXf0ljl5iRLLa9FXu7ow0I0yRswKKMUbOCujFFLniJeOQOfTMb70nlbytVO72wS9i7hX69s6RIfqjBQWcbiaaEabIWQHFGCNnBfRiilzRCmpGEIR+K6Q2t20vF5rA4+hNGC3LXJa5crtZawDd7nDlDqPTXvQSmjndTDQjTJGzApoxRlZAMaaoaKqaEZSavo30E1zmXh29OqrKJ3yG28jKCRTTNfQwbaqbEaZo4nRfRRgjZwUUY4qKprUZkbksc6X+n3P02aqc/l9GZqMZYYomQ/dVhDFyVkAxpqhoapuRbfT9qVyJlRu3mWlGmKKJ0H0VYYycFVCMKSqaxmYk3IKf4HJduW6XlRunWWhGmKLJ0X0VYYycFVCMKSpeMg6ZQ89kO3rlgmhhI3oKPI/Xl2Uui1Ru4A02+R4UK3dPRpoRpshZAcUYI2cF9GKKXNG0DD3rb6eLswKmMEU6wRbGSCeYwhTpxMpNb+U0YYp0gi2MkU4whSnSKWtc3bP1eOlt7oSY/DkxnRUMSe8pvalj7RE0c1ZAL6bIWQHFGCNnBfRiipwVWePqGpsIzkZuI2WbHleXtad0+oWVm/7jnylyVkAxxshZAb2YImdF3hD8jdb/VW54XB06cdj1ewY/gFy6LF9Vbi1a+uJH2snPK+KsgGJMkRXQjDGyAooxRVbkVO7tuzu2kTKuDqc7aMieof9pudTc3upX7hlatWUZaed/Xonf7N19UxJRFAbwB3aXdxGWt0BDXsywkpJMUyu17OXy/T9Q0rkUMMuddrPxHDy/Zvjj7rZNPs+d2VngqEMPk9EWaYtmtEZaI3a0RVJEJ1fxXyZMjsbV4X09dRT1TKv6vNtuIR0EhT0aaWfP58NIAca0RVKAM62RFGBMWyRFZHK1zhmSJjfATONbdSsyucbTy1arU8NWhr64XRyAFyMFGNMWSQHOtEZSgDFtkRSRyQ2+IG5yy+Pq4KG8Y1eW3mCr4vVFq9jG8YlNzp7Ph5ECjGmLpABnWiMpwJi2SIqocXWTkyAIKnGTWxxXh44fpuzK8hts2DOtRjs8f2OTs+fzYaQAX9oiIwUY0xoZKcCXtshIASdK5VHNiTFSQBRtEU+QRWvEE0TRFj2UqYvejDBOzkX3P2tGCsiiNeIJomiLHsrUJXICa3krCPbjjKuj1wKW+B6sbKkInJZmr5PQB1n5bUOTMDgGibyO2/Lf6geFzCYk58J6/2uLjBRgTGtkpABf2iLDx9QlcgJrY4jyTczbSGdyGaDR275uLkygWf09zAdXwH0kR7IbkZwL6/2vLTJSgDGtkZECfGmLDB9Tl3VDz15eNOInd+CPgV3fTwGHYb3pFQdAepd+jpM2kN2bX7/bXU7uKLjo0W2k6zozNAiPhtzRUZBCtXRA6zY5r1kPD+crrfd1fywtORfW+19bZKQAZ1ojKcCYtoiPBDcjQ79wi9jJmTN0Jl5zWM5ve6Xa8dRr9IYIt+nneHrw8XTwfJ5cLrecHJA7BXFcZ4YG4dGQu7uj/akHYkaNfIXWbXLTfq3k2ZVW4RhHmz2ujhNtkRTgTGskBRjTFvGR6MlIvxP/NvIESO/u54D6k085oOfh9VXmEvPkAJscWZPc+usQGoRHQ+7sUfIOyO7Ruk2uB+T27UqrI/CZlouA/a8tEgCcaY2kAGPaIj6S3IzQ/z15cvv0M927HN8i4pmWIznHdTJBMKJBeHYoHiVn1wuzf4fWl5KjlVZbYHIuIva/tog9cKY1kgKMaYv4iH8z8qKMyk0l0TOtkVcaHs2fRQFbvVrkp326XUdya65DaBAeDblbfKZFydE6UN+fP9OiFZnJufDf/9oiCcCZ1kgKMKYt4mPqEjmBdeT7YSrBR49/2E/pfAUOw/OmBzz7DJscbkulIlbfYLPfg1pIznEdQoPwaMgdHV1Izq5jVAoqXvM8PLRnykzOhfX+1xYZKcCY1shIAb60RYaPhxx6dvnEJkcoudjoOtF8b/0NsfTvQbmw3v/aIiMFZNEa8QRRtEU8/c/kyqUcZs79IqyJn0VMdB1N7rHuf23RgkfeIq0RUxBFW8RT1Lg6YPjhbfxxdTa/4iHu7NawVusiCD+CLJ4Z/NJAfJs5O1fs/tcWGSnAmNbISAG+tEVGiqhxdUC3TclRHvFeSb7sSK6N7Z3KwpmcGCnAl7bISAHGtEZGCvClLTJSRD4J6v9IJ07uc74KPAne+UGFRsWls81qaRvodheSw5sMHaUz6bM6NFSOBs/9NU2OIW2RFOBMayQFGNMWSRGZ3LmXPDmkqvbm0A6VS78dvx0XgVxuIbnrNw06SmdScjRUjgbP4T+QNq5O+P7XFgkAzrRGUoAxbZEUUckVu7iX5GhUXDp19+dq+Q22sHBmjy4n1/k9eA4x6G0kN9oiKcCZ1kgKMKYtkiIque/N0s7N1T0kN8CdX8mlVt5gK+YbdPRPcp3M7MDvFP+aJsePtkgKcKY1kgKMaYukiEoO+PfbSL8PO1SOklt9g+0yRUfpTHwo13Y0uY3a/9oiCcCZ1kgKMKYtkiJqXN2/JOcF+Z3gOfAq7FRoVBwlt/IGG0Y+HbVnfnlaDTS5Tdn/2iIjBRjTGhkpwJe2yEgBhwTJyWekgCjaIp4gi9aIJ4iiLeJJk9vc5DjRFvEEWbRGPEEUbRFPkePqToJgHHNcHb1G5dcPChms1++EwTUi7NbcK0STY0hbZKQAY1ojIwX40hYZKX6yd287TYRRFIAXdKYtMC1lgCJVW/GMWiNVERQBj8lfSVETw5Vv4Av4Bl740NKumXbaDJMeNO6t+zMxzbadi6415g+229R1dYuzHCP5e1IhK7lHLVTKSLFQzp6QJSeQtchpAcGsRk4LyGUtclpgRO63JHe0Ajw8wqZfesPk+BmeaEVd8mPIjQJPiJ43h2hR3ZXQq0dr7HgFzqMJRtmGGHmsRVpAMquRFhDMWqRFanJPSrX3MyXXrAJBE/ewHlSSyXFFXfJjyDd7j3LVG+WF5WhR3fMbWI4OjbwC53aMVHb/W4sUgGRWIy0gmLVIi9TkKsgfrM6SHDbzjT1g3vcXG8nkohV1CYfFKL9uolxUt7c212Ry0RU4t+SU3f/WIgUgmdVICwhmLdIiLbmuq1szJTdXn3+JjdoqSvlBcrU8V9QlNQqD5Jgu1t+vlJhcdAXOLTll97+1SAFIZjXSAoJZi7RIS668itzBjZmSK3v+MpY2sfMkD6zdjBfSxSvq6nXESi1UyrngRnNhOUooh/JlLryLrsA5JxhlyQlkLdICklmNtIBg1iIt0tbV3Q08/w5mSg57BWB9M9x/lAfuBn60kC5eUVcsIrZTC71jXPG8d4gSqnnhHLjGjlfgnBOMsuTksRY5LSCY1chpAbmsRU6Odpaxlp79V3tinBZQxVokE3SxGskEVaxFf4cdRvQml8Xuf9GcFtDFaiQTVLEW/S3tLOkbWPNeuDbFurrGBn/PWlRXCJaA3aD7eyv0MGTdf3VQQvcP/B2k4zUnsTj8Wk3JZRF9/1uLnBYQzGrktIBc1iInRztL+gbWoIVl0GxHx0I+bbJ+bfm4yk8WjeD/rHj7CBkKUyVHBVXJZRF9/1uLnBYQzGrktIBc1iInxySHEb6b+RposuS4cm5jb817yLV0fKe4fi45aW3yS9ZMrl4fTq7pP7/GY+SY16TkZDtcq+ZAXIGXeG2uuhZucxJd+d9YVyeJtUgLSGY10gKCWYvkmPwwcvjihf9m4uSilXMbiztoci0d3ymun0tOdm+/3L1+J06uWBw9RhZ3QeNdkxKTXLC61Y6S46o7zqPk2lurQY4TXlnqMTKL/PvfWqQBJLMaaQHBrEVyTH4YOXp+3AzuT5pctOVlowaAa+n4TnH9HCdxckCcHKUnN+Y1KTE5LALXouS46o7zKLlrQPFmNNmoCf6ZVhb597+1SANIZjXSAoJZi+SY/DBy6RHf2emS2wTAtXR8p7h+jpPkz7QmSC77mnnfvzs0YXKc8wvdnA8lx8nGpuDkssi//61FGkAyq5EWEMxaJMfkh5HmQXndm3h3LlfO8b3gWjouquP6OU7SPu1Tr1+U3JjXpMQk+TMtJpd8LX+mxYns5LLIv/+tRRpAMquRFhDMWiRHO0vqBlbs+uGtqT7t8y46mHEtHRfVcf0cJ0wOb4NgCaP/wBZ9DyqR3JjXpORkO9yvDiWXfG2uuh9ugxPZyWURff9bi5wWEMxq5LSAXNYip8Vv2xAzFiZHTO5P8XIXH5S1fA9K7f1vLXJaQBerkUxQxVokU9qGmGe+7z9tIHK7MO7vzG9pG+eurCLVvrcEbNVC/xgtr8AZn8/XWnL/wP1vLXJaQDCrkdMCclmLnBapG2KASjDFujomRwtlXOxRC5Uy6ILn+z3rGNe/uDtX7f1vLXJaQDCrkdMCclmLnBYXHLKu1Kdd5P96YQW45D/1/Aq3sMwXqivBcvJTPY3CYPsLN7jw+XwtJ/yHMV4hkyUnkLVIC0hmNdICglmLtLgguVJj2uQwtxIfC7mFZf7xw8cPl5Kf6rlZHGx/4QYXPp+v5YTJ8Qr4w6Suq1N//1uLxINkViMtIJi1SIv05LZCzJ5ctK9lfu781xESDouDL1xzg0syOU6YHK8AZLNjpDTWIi0gmdVICwhmLdIiPbn5+d+RHLew9JKbQ0KjMEiOCQ0lx8kiUMvzCtksOXmsRVpAMquRFhDMWqRFenLB1qzJeVvxThcmN7QJptRCpcztL8yJzx9K7qC8ejne7JLJkpPHWqQFJLMaaQHBrEVapG6IyfuYNrmcv3DZvwM8CGsVbmGJkysWEduphd4xt78wJz6fr40mb66u+PFmlyyWnDzWIqcFBLMaOS0gl7XIaYF00yann0vxo6/d962v03fWdxr72HeaNpteG6pYi2SCLlajhJO+D30nf4WyGlmL3Le+r31fUnzq+xo7S/E5xccxncbaltxYh5GfP791vo8cRs4+n5x9GTmMnHZOTj/2DiPdvyFOegePTudD57T3nnfO79sOZ91H3dn5q3qz7qOTToePTs4NHp1Gjz4kHtlhRDanBXSxGvXZYcRa9Iu9c+tto4ji+LaJy6XphbQpNEBpKZRrgZZbL9zEPfZq5sx4d4dMbG8pAtfSVoIHLhGWAPFSibzQT8AD8IYQQgjxQMVH45w59nodnCWElq7L/Fslf85eTHOOPb/OzJ7+GxgxsmEYRqRoSONgBGQomUkkOuNgxDkHIzS4aQcjPMyRcTGCETQCQKMEOokOgBxacA4PT3ZSOrepIe2e2//B1+nXhMQRjFzK4mwdjFAK2sk4jAghhdSUJPxcaDgIgZB+1gCSAEU0GpJizrk85JSBRoRDF7JzISGHlxbctMGIr6JqKpgu+TLK5WHEV9G/ghGNtMEwIoUEByNaSzAxSUgURpTCY+gIRjAmhIMR5xyMaIEkwzCCkgwjBCFDGGHyECFRS9HxGBg6GHEOYWRS79zgydn57Rtj5K0bdam9aW7n8A4n5+lrUbfM1mo7i4Hyrrnb7qwdzG+Mt6udcKbk1ctUvOpI7dYdW4ARswbrYQRiadbDSAgNMYSR+gBGGrLBMNJg8MAYOo4JNAPIaIy5cDzWKLqqw4ivoqVpUVBh+TIqy5yHEV9FW60inhnJxABGhAm1gxEpY6EZRjDGMEKOYSQUMmQYcY5nRoYwIkIc3hhGkEDIAaBrMIzwX8OdawwdDWQMI+jqBCOTeuc+fGBh4fDMFjK3g++Qb2EuaY5beoA3Id8xl7fOPYYPdV+NzLFu2gKMZPFavDoOIyBN2F63TBM2KDcORur4SzKMhHVeksEPi7qgmHSOoTCHDHJynaN8sSONXLWXaXwVLU2LggrLl1FZ5jyM+CraehVlmZTtkGGEOIJhRAjdMDEJY3VwyzTuKC3TGEx03S3TaGILMCgRojRGXEhoErkQvzN4EG6QQz/uJBrn8r+Q1yc9B/XwLUePzu3eOHPHZh8bdr59aH7/gRl6dHr7XcOfyEwhc4cOrUsQbyvm7rh7D9Z2HSl0zS1206XMBYsPcu/c47Uzhxkjy16dmXR+9lDAV/FRF+V7cnyQuZkD++cfGkZuP7Ufb7pRuzqGEVyo6Y/DiIgTI8dhRNcJL7Q2UtQbCCNCEAGK0C3JCIxhKoRES66BBg+hhCBSCcOho0tzF45iYcFVGUZ8FS1Ni4Iqy5dRiTyM+CraehXR8JUZ6WCkYdoydDAStmMQMQkJQ5BTyjmllDEIDCI0baM1OccgIhRu04gGNDTKaXJhSA6kG/mkBOA1gTHnBjJ0AIKdmAwjwV1nzjy68ZzW0rPB4knufDszt+9EfWbh8NFgfs+kzN1889ic1nHO3KA77v7ng+N7ir1hit106b/vfXXYO/fmZwKnkldnnTka7An4Kjx6pD7IHN+T44PM1Y/sm5sZRG6/9URwvHRmpE+zHWYMRhKaqAjjMRiRiAmOFGWjXm/wnhGBhmGkgS50MMIODR/E5AycoHuOu5BcI3d046ov0/gqWpoWBVWWL6MSeRjxVbT1KsoyN3wRjCBkIA8YghFyIX6P2/UQhU4NnFJGomMYEegYRlzBCTRu5GuA1iPnRr6QlmTYhWNONoZOoNsYRnafOr57bu+GmXuKsI2bzVEXXJz9evzFHWeDCZlDTcRI7o575wJF8syNd9PlzHHv3FHmSl6ddWr/tuMBX8VHOcz35Pggc4fxrvcNIrcv/t0yTZbh7Ei8WoSRtkiSRKyHEQkQgjEypJQw+NFyGBriCME7jQGdRIexOsYwnQ5G3GM3zoUhOb5JOMlNAYz4KpoGBVWWL6MSeRjxVbT1KspimhUJY4QRjbMibtNIbEKaEzH4BRqGYggjuqENOqXaoq6NxvOMEXXQbpgzNLYJgXHgUU7rkQOkFxrSCEHIhUU3GgOBx8WNYOSZY/hTe2AzmbuPfzr3nH3s1U1nbnEH52+jzPFRntPi3rmjzJW8+o5a7cEgWHj9tl0BX8WZ4zjfk+NjmePI7Qf/DkZMf21ttZ8VYUSDIY3BiHAbcghGBh8LxCZu3oNgBAmDRDF2BCghx6RgJ9lRbviCiW4aYMRX0TQoqLJ8GZXIw4ivoq1XUSalaxmCMCKFJCGMgIMJ7baMAAlhRDrnYCSUKCAYYUc7WdFpkEZLGpzQ65EDwSMa8Bg4cpJdY3BUhu68DWDkZG1h39yR0jmtB7nzLc8qYTPcw/uCTS2wUUfcQeZoTuvonmLX3GI3Xd7tw71zR5kreXXWTLD7zoCvKs5p8T05jjm/L5/T4ghm7uo0PdNmICkmNDgbxeRfYpPc5IPT0PTMV9G0KKiyfBmVyMOIr6KyKrrqTc9Mm2XyYW7kiGFYI5cPc2RK3IZDGvfOPTQ3/1DJc1BvDvbbvEY7ak7Tjpr7X2Y8y++QL7Ctyxx3xOXMud0+xa65xW66+BzU2UcC7p07ylzJq7MWZ+e3Da7io8XMDe/24Fxt78yB0/Rn5MjkzH2dK8z1ba4o10e5lnO9O9QodD7X8ibVLVMjqK58FS1tUvXNqXGtVOlRxJfR0gSt5mrl+jjXhVzncq0MtZyrk6uVq5mrlyvJFZXJfxhNWxWN1Jig8LpoCx1YJ+nsHZy5MRz9z8Svzip/Sqrk/28ijPz+Q//3dTDy5efZFx84GFEWVOpg5K2V+MKHDkbS1KZNByOtpuq95WAk4hhSSC9SUQdhhGIKY6gexrodcmh63W7Rdbv4IilaVG/kUnTVhhFfRR5GhvJldJXLaBWXi8NszcFITM0FHIxkkczWHIzESsYtByNxDPEKwUisIG45GHGuQzCiFKhmk2CEYpGDEdUGGzkYUVbbyMEIudTBiHMRSimlVUQio9Jqw4ivommFEe7v8sbsrvvy0LGbxr9y/rinC/d32T3HtHh6dmfe0mUWz3QraHcSwvH5eXeWqyh+9WsGI7/89M2VdTDyxedffMYworWyimDk3AV8z3/oYMRGSnUIRppRp9d7m2AkVRQjGInSXpo6GIlVTymGERXZyLkUYyk727MpwQgapbokCtmRqzaM+CryMOLL6NrBSGyy/gBGtIkZRrIkaTkYoUcgYoaRJIljhhEVx02CEXYEI7FqxyohGFEmNqpJMNLWsbEJwYjVyuqIYEQbpbWDEW3ROQRJrQLlHJ6nbbVhxFfRtMKI6++y4+6F3c8dHYbuv3n8K2euvL8L6278ue2tlXdn2bxqTgvBVVY5jFy+cnkdjHxx8YM1hhGtLUBKMLLS+iQ552ZGrI40w0ikluOmgxGFsZRgZFmpnu0RjDSVTbUDjxRpA7rklFJaD50l1+1aSDXBCDk1cqCqDSO+ijyM+DL6FyqHkcysaYaRtszkAEbitbaDkZV2u6UdjLyv1IpJCEaUaSKzEIwok2jVIhhpm0i33cwIEgZYByMAsTQORshZgpEUdFtaghF0FmMoghKRouGPQFVtGPFVNK0w4vDqVdx6/MQd5f+qEPd04f4u3Gdl+00HbpvbU9zhc+/JY8d2nObuLHw+Z47Pr6jGYOSbn65c/n0cRi5+/GX/ewcjABDqNEUYSZor6m2CkZYBLdNmc/ndd1LEje477yBSYAziXvP8ckdpDcny+eVuTwFA1MODCp3tEXlYZYXq9diFFl23Z4He673u0EUDZ9NKv/99FXkY8WV0zWAkNn3JMKJlLHiZJkYE6SOMrKwYqUSycuHC+yttrUTzfYQRgwaZZWW5o7URqtVa7jS11qKN6zStJoAWKklazUhLCNtp1OxFIEHYNOqlCqQU7ThJyAlh4yhKtZYCFDkACEEp/2E0dVU0NTByYnbfS2deLM8cbxZmjOQ+K9uffOzJx3YWd/i88eqpgy8c4u4sfD5njs8PKihqV1eEke9///qHX8ZhZO2Db7+8yDCiLIDbM5J+8uGFJsFIB1QaK9oz8rbtLjcj2jNCMYUxnBGxaZRE+L3Ts0pFPDOCx1QXTddGyuJp7ECR6Wo8L+2i0FlbcNWeGfFV5GHEl9E1KCOGEeivZsbBiMxabXAwYt7/uNV2MCKTldhcQBi5IJsriaKZEUiaStOekQ4kiTW0gbUJUdTWtIG1KVWqDO0ZSaRVxtCekQidtbhnJIrBGEUzI+hoWTpCaau1TtGkoKzUFd/A6qtoqmEkeLJ29vQLm88c91nZvg1/Ub5zvfbQwf1PPs/dWYqZ4/ODamoMRtYuX758aQxGvsouXrzY+opgxHU0czBicJJTEYw0hTbW0DLNO5AiZ9AyTVdqqy0t03SlQtEyDb3ZFcZoDccqnRJ5AKBjLHEOTU+C5sUZdNayA3QVX6bxVeRhxJfRtZoZWQuNMWINYSRzTZwzghFJnarO0TINNfaGFVymIaeAZkZcT2gHI/T5BB2CEQHaSFqmSQQYDbRME4UAWicEI4IcLdOoEDQ6hJGBQ4EELS2aVAgAWfFlGl9F0w0jqCd2bD5z3GfFZW5bUNDrp97YfvZZfgapkDk6v7oqwsgPPyGQ/PZ7EUY+W/v226/6HyCMxFKnKdAG1ovJhx99GF9EGEmh14xsD2Fk2bz1zvn4LYSRCHrdnuohjESwfL6rOggjKXQ7kaLHaWgvatrrIHkQdeCl6ChmCUZSoB2vXdTIKXJTASO+ijyM+DK6+jBCsyJr0EcYiWWrlYkYYaRvPv74nOkjjCQIIi1oIYyge3/F4Nb6JqEG0AbWJiTkEEYSWk0G2sAayyiJdIQwomQcpRrjvYFDGLEijZROEUYGjmAE0tQqNCmAUlXfM+KraLphZHfw+lywmcxxfxfus8KZKy6wPfz0CzuffqSYOe7OwucH1VQRRn764cqVKz98U4SRzz//9NNPv/wSYUSBUSiEkXPNc6i3EUZUOyIhjOAiDAlhRCkKEYykiqZAu+cpRo/NEXlYdN0uup5NMYZm5LruNDretevdFMCIryIPI76Mrj6MtLN+v59lCCOaOncbgzCS0TbWLEMYiU0URXGCMBK3ExI+VWNijCUII6lGl0YII7FWaZpGCCNWx6gUYYRdjJ9R1pIhGDFaoWKEEc2OYMTQIjM6BRZDUwEjvoqmD0a4v8vB+dqOv8kc93Th/i7cZ4UzN9YV5umX9j61wJnj87k7C58fVFP/qulZJ2969vaw6VkeO5+LY+vVHbkbo+mZryIPI76MtqBr2PSskzc9a3ZYrWbe9CzJm55FedOzqLTpWTo1Tc98FU0fjIxUnrkbV9+9NxTkupRL5+rksrmiXGqoOJe6uqry+99X0dK0KJgu+TLKNbkdfGmssZFuaKb1VbRJ1XMVYv+hlnzmJsDIz0t/jGBEEIysrfbNag4jAAQjUWxxpdXBCMYsilsSxg5GrMWQgxFrtLEORixJqaKzZY7EZr3zMFJtLU2LgumSL6NcHkZ8Fd3QMPLw4vyuZ4Pgmbm5ncGoQ0xJnxhqV1fQxMiRxfnaS8E6lVx7PcUw8tt3vzgYEaGAMHQwcqmftRyMgAANkmAkRuyImwQjWmIMCEasjo1JCUYALP4mGNGgtFYIIxY0xhQJNP1GWY0xdpA7dy07/G0nuSrDiK8iDyO+jDyMVEK+iqYVRvbcE8w8Fywc3vPSgVKM5K8T2tVNijxxMtj7l7NKrr2eYhj58Y8fCUZE2BAhw0h/NVuNCUYwCFLQzEjLmMQwjAgBUmqEkVSCAk0wYkOhGUaUkIQWsbKAIelwg2jGOYsOhCUn0UnnhIRBDL8BTHDVhhFfRR5GfBl5GKmEfBVNK4yQ7lw4eZAeo95E5ort6pAB52cPDSLFDcj33MSEODu7LeDWdWNnHqzteoXjw8h1FMPIrz+9993PCCP05qXNgwQjWdaP11YvadmgaBjqThO0FSaKOhbc+1yCjZQUMgSLRlMsBIhjKwhqQCstRUhOKUsuJKcFxSS5UAh8KecwxE7QeSMnC67CMOKryMOILyMPI5WRr6JNqIow8uyp4Jljzz9z7wObxci8/dyZo8GeQaS4Afk+52YOHN19yx5uXTd25sPBwtxejl9/jMR2dT/iKs3P7/2K6zQgGg4ZwMHI6mp/jWZGQoQB0DQzAmmilNvAKiQIsDQzIvgfjqKZEQnS7RlRIVgw+N2CBNBWoQAGzmJIshOg8Wp2IGDoQE1wld/A+n+voqVpUVBp+TLaWB5GfBVdzQ+jCsLI3tlHMHNBsPnM5e3nTu3fdpwjY3rh5kH+KLvcuq545vZa7dZ7OH79M+dmRv4If0QhjEBYz2EkzrI4oz0jooERhhGwSrccjIQSHIzEUmptaZkGYxRSbmYEwO0ZAaIYjA2dQkkBGsjZoeNL2YEg8Fjvqg8j//sqWpoWBVWWL6MSeRjxVXRjz4zsW8TNPpuf08rb1ZEWXr9t14TM8ZwWZ44f0C6eefvivmDXDo5XInPf0SrNe7ROA0ATIwwjWf/SJdw2gjACITCMNKlXoUkIRqTQmmEEbBwbByMSrGYYAW2NgxEtrIs5p5xRMIxZkOQUOooBO+Cz1ruKw4ivoqVpUVBh+TIqy5yHEV9FNzaM3IuLXZve7TPeri6YCXbfOYjkC2ykXbTbZ2bu6PFb9nCGimfuPBiceCrPHEaut74jDnH7RgCEGPYZibH78qW1PsEIaKdOpKIERTAC2hGFjYylhiKuNyFYFMGI1oQQDkY0x9BxDAXDmAU2udvwsd7q9xnxVbQ0LQoqLF9GZZnzMOKr6IaGkZNP1Wq43+ZVfA5qU5krtqsLFmfntw0jxaZ1JxbnZ1+i3T6vBZyh4pkLB+dPP5Fnjq+9rio2PRMTmp5B3vSs9demZ2k0kLKKRWzCYvpYLzvJlR6sftMzX0UeRnwZeRj5k50z+22diMJ44bbs+77vIPYdse97bM3qmWniGTu3skQrBakSD2XpAw888NAn/mLOmeOYpknTFgI4MB8i+XRi+0qdU/eXmfHXC6UuWlcYWZwQ87/KiVk0Sj918p2+7VR2WpDA3HQqF8gvkD6fegwjqYvO/CsyL7ZAfF5itRpsrJdSG339W6eDTj93+naBvp/q8gKNF2h7qZp55RtrpdRFCzW4qLLVKsHI+WAEnqVxP0cYCS4PNsKItWpyEGHESGF8hBFrlEUmgZoRRkcYMUYZH2HESIU1dCY6742RzmoPAmM0OK3JoYxxxk6dLFoXZJFgpN9aFYzkWZYTlOCT4nmEEXRMiFMcYxljZMDxtgSVeZdgpO9aDCM/HPEfCEYmEz45ijBSelf+GGHEW+fxtgROS38ZYcRb6ceXEUa0lnoMCEJue4wworXRzRiFrowwgm64jdIWauR0HWuN1rb+ZtiAwOhqmGCk31pTGGnj6l76eHPjrLg6er1u9vzNS1N3Nc6KUezdq7dtnnzsG1+m517/DCTabV13FdhOS668XN1ZdM3VwchPR5NDgpHggokw4kElwQgqwoixoAgjGM9qWhixtSkRRoIppCxR5BBGtDTOehAu6EhLMCJNiOQhQy2Djm5Uy5GlGro+w0jqopXCSB5hBEwGDsEji0EzMw5NLsgxcozybdDlUOMnHQPXaxhJbXQajBzCfvoWRszkkGBkH24/EUZ0SbcldGAjjEDFjxFGvNfejglGdGW3I4xYb+32GEQOYYQcqrC+LqauQNfobwotdYSRotCF7jWMpC5aVxihuLqNp6/aPA9GLh25q/7YNXTpxMg9CEfdsjV77tWrHTm65iphZPKriTDilOUEI9YeGIKREHwgGIG3YCKMuOCVjDASpHcRRrQLVsFx4IK0Apz3sg6SRxgJoVAuwshoVCsVYUSpGmrkjBoVU+eKPsNI6qJVwQgiyIBgZDDIBzTTAW8ZEUXn+CCH4wQ6gJEsupxBjUVHh825nsNIaqPTYMT84loYMUeuhRH/42QfYeTAarwtIYNYPTY+Gjs2Ns6MWFsagpGiGJoiwogxjSwAQdCVpthFGDGmknUD5FGZQrsCDDkLpin26kJ909D3LCP7DSOpi9YVRqaQd+ncI/fU5ovTKLpnbrvjrkv4TNSVD9BPjZ6nwqvNbkZ+7NWnnrrq7Ta67pNrb+1+yhR7B1p2ZRQF3tHx9CmV6ZpUp2teuuuO256ZVu5+6w646J+CEUg9878gjChheBFhxBjvxhFGlIIawQg4vb8/hpoIzHhcnnEqcFNVpddKCGZ0Cc4JwQsNJjjORWE9lJRjwVqvrVIqV0WhwQnFXA2ugFPB1a1Tpu4xjKQuWiGMZIOcg1g2yL6OCzAcHdSOOQ5uAE4IOoOhy3NyCB7AMULMu37DSGqjU2DkcPJrCyPGeUUwMrH74bsII8Zot38ACHLZyEI133/77WVjrMJ1mstjI63QY6CRbSmNAMi4PN6WQYqihIWaxgQDrhxvN9JJZapqe6jlSAnrt9E5cpWBmtsDBvFSBh607jOMpC5aYxiBuLoLjNzXb27c9ypF0V264fZXBpfufOTxjdtupp8axd7h1WYD7L787K17P3hoGlF3RTtyXewdaNmVURR4R8fDp48O2pGja1K9HbnBo7ffcKmt3H3dKxsvXDiujmDk598Of0AYYdYHEWEkfPdtaSKMcF0aF2GE+7IIcWaEWy0DzoyUwnoZ4N1rXhcGauAEOIkmSCOD9R5KxriARitj1EijhDROorEYsNa5kez7npHURSuCkRwoJMIInDTIIoIMaO7jmOPo8tax1uElaZkmA5OJOZdnvd8zktpoEYyYX387mkQYgWmRSYgwYr79eX8SYSSMD0obt60G+FJUgLsMxpq4gTWU+9bEfaujclgbNNtOV0UxBoHzhUWzHayu4yyIl7gS0zmsDTFHqaiaphlKbUdF7zewpi5aUxiBuLqLjNzriHaU/oKxdI9c2njpw6vepZFoY+/m57Q+f+beO157v42o60aui70DLbsyigLv6Pj20yi6JtXbkXsEeuYJqkAczZ9dpjmaTCZugjCSO6eYRRgR1lp3gDCShxB4hJE8GKMijOTKBRFhhLkgFS7TFNH5El2Q0vkSJ1rgMIkMwpUKQoPRXKigIniAcw5dwdDZqev3npHURauaGWEDmuhAGBkMaJmGf41FMMdc/nWW5SccfAZWTJ046fKs9zCS2mghjHBjjEMYOULHjxBGlLU2RBgR1vrwLTIIt1bL78EoAx/GZRpyoLEyxroxwogIppa4TNMIZ2oDbrsRI1nX2yAtgEFMg46DK8A1Usk67CGMKBVq2fcNrKmL1hRGMK7uT47cE/QTfPjdFz/bmJvTmtEXb3155btv0oPYMyP3GDrUkitftbX1NEXjtcfTyFGdrkn1mZGjyt33/lkYOTzC2ZFffvKGez/hCCNj+I0/wHWaUgsADKUBRrwqx6UDKIGa9h5qTQOu8s4jjHDttYPjOuc9soY0yCA48aEsGKuCtQrBwwhp60Au1PWoQKfQ9XrPSOqiVcFIPoBXXKcBl7M87veItYyJE46fdBluUcUTeIZTLGBmHFy078s0qY0WwsgPOCsSfgUYOXQHB0fqEGDkwPz484/mAGBkF29LAZePG/c9rNCAG4fy8ljiBtb9gEvJ+wAjjYQFF4l7Rqrgm9Lg4zQ+6LI0JcCIDnpYmSEiiKqaqq6mrigRRkbfVIUGBqmk1FXfYSR10brCCMbVXXRO62mKoqOZJ0ine+T2md0+8wtsz77xwfVvPDc7cnc80cXegZZdGUWBd3T88TktuibV6Zo0p0WVvwAj5uiHH3759ugn75QxJhiAEW/ax2lKE6BmLcCIDRbkAUaMK0AWYMTEmm7KrgYukPNewbkaTvGFM0VhwOhaybquC3pwZt5JdP2GkdRFq4IRSqzinJOJMBIdE6c5hmphhHNwLF6cC3RYQcej6zmMpDZaCCOTI0hfPDoEGJngLWgyARgp7T4KYMTbEnQIMOILdA3coKxHBzBSwgngAUYq/AJUDQFGdO3B4RO9uvAghBGLdxqPCGKxFl0xdY2ET4dV1TTeWDyu3zCSumhNYaSNq7v149ffu/58u32+avfkfI67bt7GXTdPfjJFOIq9m1lgI73x0S2v30k/5Utb196/BfNeT9+wNY29Ay25MokC7+h4/HRm5KhO17x019uw24cqMHL/QuhZ2YWe+Wmxc95r36pzepHsH67/oWepi/6Z0DO+3K176Flqo78z9Gw8fd8eT9W54wln864ZNlMN+x96lrpoXWFkFQkx797TjhyJRm4loiuTlj8lteTf/msjp1R8hlLBeyfnMHJKOOd4J6rBWxdIhedg8ANXqM4xjiv80bGcLXA5ncChJo67Pv8ZSV20qHd++OEHP2ETfPPeqRzX5ODpTF8IfCBif99IfNp7HybRMTpvPwZSFUYVDfyRIFfGvxNF7YoK3he43d3doh4V1e5u0xR7xUgPG5Atgq3A7ezgzsNvhjsgcHvVcKfHSJva6KybkXO4Iqecc6xTCIxl3IUQlMrbmwyUcqag5lx0yoHn4PA9Oq5CdPyYY+ikFByuIVGdE4ozMWpLQoFLN6P17aKVaLAKrRxGbrqBaPHtzes7Nt28emMFwiv/6yOnVI6z3idhhIFOwgiCRAsj4CJc4HG5UtFxckxAiUeHmnOcMdE51bn/OIz8J7sIKQRDqghGgnMBYcQeeGMIRjC1gWAERTBijS2GY5CxGiKnEEbqQtPmQnC2rpupMxFG6hpqEUaGdUHRVHYPajrCyF69Z/Z2QHvg6r3/OIz8J9toFkZyxk/ACEcRjOAtiGCEcUYwgk5EGOHgInkwDnInnYhOSg6OSRA4RU6MuGAiOgGfiv84jPzHu6i3MEJxdfR6jrg6Gj+KnAM9gOtfnS4eUUfaioLDV6SVz4yIbA5GcpXPwUjOsYaL9xnLaPYjy3lGMEKunQXJeHTILCccvGVMdE5NXb9hJHXRqTDijhzBiFKWS4IRc+gIRoJ3LYyYUuoII0ZWEjcXoiuljTACtYAwgs5LghFptCsijEi5p4oII1oWompARb03klWEkboAtwMi12sYSW10JoywTGV8bmbEMYKRrL1nQEnlLYzkIicYYQwcwQhTcE50ufjDxTOkzOFcLlFwBjkh8DsVOs7Aql7DSOqidYURiquj1zmMPBMmr72ps6SzI+r6pzNhBNCCz8EIy+aWabJ8wAlGBjEJUymRYU2p4w7XcDJBfMIGLW50Dj/8w/H2U3C9hpHURafBiHGHgmBE8JiJhyGawZoxwoiiwDyAkRCs8pcRRpwruB6jgjPCx2UadHobJVXrhhhS5RFGqugQRqSEJN9h06CrhW0QRtAVOyhyvYaR1EZnwkie8TkYwS8rimZG2ptMiPengDCSZWzA4IQQazyg8I4mTnFyxOA4BA9wfyAIaER8wjMhew0jqYvWFUYI+Oj1/CNHkXP3bL2xuXULBcNdefVdt95w8/kj6nqks2AEQIBlJ2AESITlJ2AEjsMaRlMxnBnhSoj4eKZQ6FjrclDG0FEg1bzL0SlweY6mdX2GkdRFp8GIO/rBmwgjrPCBx5mRyXhs4H2/5NobUZb7kAHhS+vGY9hcqLSWqsGEbqG1CQ3GPAirpSujK6x0w+H2sBKmNqNye3foo6t2m0qCRphNVbmiViNdNTvVqJZK6W92ooPaN32GkdRGZ8IIkAjLTsKICzynmREuWBZhRLhYclDiOZRccDk656CItfwUN8IF5UgexxyHd7gkuFzgQpDrM4ykLlpjGHnzLXq9AEbSs0yEkRQMd+VrL7724vUXiKjric6Mq1NiAPQw4DMwojIkCjUDI2pANSHY1xmICwUOa0KBw0/zdrKEJj/4AJ2YcQxdTrUcpDrX65mR1EU3ngIjPATHEUZsjjxr48xIUQiDMMJwhR6XacaYZSVwmabhUBO4gRU+NdLhMk1FDlTxkZEjpBLNpDGuARixfCSNG+42w5GSUmE8ZsUdONzAWgmFbmcnulr1fgNraqNlcipD8RkYcRm8Zi4EJQbt7aYrOfF1RneqoAY51YJAl8+7HN0IvzYRgohs6nI8DBdsVIau9xtYUxfNay1gBOLq6PVPjhwFw115Bfz34QUi6vqjM2CEZ3HCYgZGRO7wO8cMjOBxHGpCsDaaSimAGAE11bocHSZa5fihGDCOHx53HF0eXcbgBDF1rOczI6mLFsLIoQMgUTA7ErPzLMMZEfzf2vHBvscMX+4BRkq1Px6rEgOpuG6GosJAKl41GKeHSZi+qUKMoRJ6WI3QFXzYeHC7u+CGlaxgmUa5qqrjzIiSVeW+QRhBN4KJkanrOYykNloqxzPn1AkYUXkIDpdYFMtEe7vBw7DkxIALkYkIIxzqKoIH3pqiy2YcAyd5pkbgpDzm8LsQFyOEEaZUz/eMpC5a25kRjKuj1z87co+hiyN3xTkj6vqlM2CEAiFmYYTF2iyMxPApeP8jhkqp9jh13GESpuDgYgwVms7hv8Fbx6ITnes3jKQuWgwjZnJ4eDiZAIw4EUASQERZ78eH/mDfuBidBzBiQ8ySAhixssDAPHyyV2oUwEgNDj7fRgcf7qEr0GkNMGKohjBi9mxV6abRodjb2wOzszeKDh+mkdH1G0ZSG50BI/H+wNgMjPCco0JQdOPpbi0IIzxDhzDS1fCExU6Ak5wJUISRzsWngxU4FTfX9xxGUhct6p11gBGKq6PXC4/c5qPTyDkauQtE1PVHZ8BIqxkY6cQ7daU/wqeUEop0Tkdmsfq9TJO6aCGMdPKdDjrtd7rc6XgO1fR9WSAVwMhwl9QsiKba2RnukFrX7w2sqY3OgpFOrFPopDp1JeeUI4HvimGJkyPZ6nTX7w2sqYvWFUYoro5ezz9y08i552+7r42co5G7QERdf7RqGOmk/oTWE0ZSF60KRua1vVS7nZoF2jmu/sNIaqOVw0incE7JM9R/GEldtK4w0ukiGPnf0j/w41/RyK2VUhctjIPPOuX/pLKp1qyLUhstVtZpcB6lm1Hqoj4qjVyCkcVKv/8JRnqn1EYLlGAkddF/EEYoqO6mG7e2npiLq1seWjcfV7ew8uh9t219tDGv5ecuV4KRnil1UYKR1EYJRnqh1EXrCiMUVHfn4xs3fXwRjKTX+bi6+crLr27cMnfU0nPPVoKRnil1UYKR1EYJRnqh1EXrCiNdUN1z79x5sZGbiasDBrxt86G2cnwD8sNXEyFubl6xQdF1M0feu3Xjp1SfVs6lBCP9U+qiU5VgJLVRgpGlSl2UYGQaVPf45nWf/SmM7OLn3nl84+a2cnwD8hPRXbrr8ZuuvZmi62aOfHbjzhtuofpKMXL1cXUJRmaUuugCXZRgJLXRSm9GCUZSFy3tonXRgrg6Wgi7IEbOxtVtvHXHFS9QZUYfXNOOH4wuRdfNHHnl1tZ1D1O993Nag4vp//X7n7poiRKMpDZKMyNLlLoIlWZGKKiOouT+3MhR/NydX9x649zI0ZxWN3KUFnPsyLvvu33jxquo3vuRG1xM/6vf/9RFyzonwUhqo9/ZO7ffNooojBuSgKDhFkohXMv9Ju7XijviGq92dmZ3dtrEuwslojiISEWQglChTeVYTvC6EPNiu7ZchVSK0jwE8cBDEX8a58xZL3HTmqRpYaPu19b+Ol5PJZ/T6a9nZo9TGDm/0iwCpTASNap77PrMjW/duLnIdbery/Rlrr8jGqENtkjX4WmfvsH7n4CaFkVozZU7hjPPPB9HDkY2qBRGEqY0i3plTgojaRqlMHJ+pVmUSWEkblf3SH//0BWb3mBb264uczvOQCNdTeueuX2o/0087fNuhiK09spbhof2PB1HDkaSfNpnZHO6nP7+p1mUwkiaRimMJEJpFm1XGFkvjMpl1Sfmww3KOIewSfyIYQkQuCw6zjl+Z6/iXErJmMGUlI7jWMywPMdxXUtZJpf4LWdCmCpwbZCKnaeYF9jajTLukPO0S3Ij7zSLPoy1urp65vS3p39aXZ2dnZ07+OPcqdnZ5eXl5sKR5onl5aWldrM91ZpfAtXa39fQzM/X2r/UivMgcJOFyNUmC3XtCoUKumKxqF0RFRYaa1xJm7BQLdXJVcM6uHo9LEyDQ4Whdk5me+myTaONLkZmLKVgCTIF9n7XK5DnebTucAcXHsEMIZ1o4RG4yORySjHl5HI538eFx/V9f2yMc4vb8H3S4+OcC26Pg6QrlT0GZm8glePDFyMZmW2lNIsunf7/dvCXYeTOAyMmPqFwWTAIRiyLMQ0jJrOYqWGECWExvSZIZTENI8pTSknb1s7rOO55tnace6PajXpcjaYwkmx1w8jM8dk/IxhZPLigYeRkc+FkC2GkBsBRJhhp1prNeQ0jYTustYA7yNXRFWphrRbBSFgoFBFG0LXhGVw7nI7cdOTC+nTYCAlG4FVwhCCEI+RSGEm2tgYjJmMm0zDCQAQjSliCYEQIJQhGPK6UhhHBcblBGFFScp5DGPFkIDnBSOBIrmFkLJBeDmHEcQM3yKUwkmz1zp3Ewgi1q4MboV59bjPt6ujx2u65+vs67urBHZnMi4P4+OxQ/7pbwOGh894dj8Kp54FrrwIbq8fMvRW/i+b8jyojloYRcibBCPMMS8OIAY5pGDEtbhCMeJZnUGXEkgz/h9LtHKFs7YTDyCnhWCrRMJJm0VkwsvjTYgQj3506epwqIwdPlCMYKZ+ciiojrXJNV0ba7ValHVVGSuXIVUsVLJIU5wvoCEYapag0Ml0tTYZoYCycCAlGGoXD+kVgl0ZFV0bIgcBNN1aSXRlJ02irlRFTGRGMeAbBCLMkIxhhQjKCEUu4LIIR4QpFMKJc4WkYUdwWBCPopIaRHJeWrysj3FbcTzSMpFm0XWGE2tXB+Zzh5zaJkT0jB5/aLbtveHMX+L6zIncXXHXjQPd7r764kaM5/xsYgb3/LBMocggjhsEMQZURwxxRBCMmyyq9JjCTUWWEMWFo3FjjLCZMGTkVOWGBSzSMpFnUDSOnjp+JYOSHowtfzGgYOVieOTart2nKx8rl4hKoXKlNtTSMVCrtqdI8qlxpfxm5yeoEuQY5oIzGSnVSb8nUq43KZJ1cpbJCfNJurLS1q1anvwyLdYAR7eogcsmGkTSNtrxNY2YthBHDYFmhYcQ0LUMRjDBheK6GEVMYXMMIM5Up9TYNLjcBbtP4Qiimt2l8JUaZ3qbhXHmehhFvVFru3kTDSJpF2xVGIrC794MrLyRyD/U/2WlF9+jQzl19eE/UlXfSp/bsMN5qjZHrPox837MPPXTVnqh13dvX3BR/ytT2DtRrZhQ1vKPr6VUapjlpnObs27Vz6NHOyK0v74RJ13eI2SKMAD1kBYgcwYjilkGVEeFF2zQ4hpURyYRQhpKu7ZqcWyYsDmucbXpcWGDA8bVOuG6CYSTNouu6YGTxzOrp4xpGjsxAcUTDyLETyzMHAUagCnLy5A9NLI380mq1K/PzACO/lErVySKeFZnouOIE7NhAUQNdu1AFB+Ax0W5XG+DqpQmAiwYOlVYajbZ2bSh96OMj9ZVC4/BKqVSsa1cplQBGGjgWlpIMI2kaXbc1GAESYYaGEeUxQ8OIwR1hahgxpaNMDSNm4CgLYcQ2ZCAYGD+HrwqkkhyTDldQIfF9cFIBg4xxGUjl4qERkXeV8v0kw0iaRf+SRUmGEWxXt6fvQiL34UuZ25+lVnR9gzc/M9J3y+77M0M30Kf24kOvvXjfwxi57gZ277/z8vDrd3da1F0RRS5uewfqNTOKGt7R9fDqvSNR5GhOGo8iN3LvzYN90cit1z6TeeJiV0asEXjM4glWK0uOcy/LGDM8LqU3YprgAEY4jFmGBBiBEWZYsCYEBrMsE3EjyMbOsGAmG+QYosslujKSZlFXZeSnbxcXF3/WMPLjd999d0jDyJG5ubmjWBkpT5bLR8pLoKlytT2lKyNfV6rtL+dROPY9muLn5SpgiXaVarWC2zR1cqDw6wZgiXZfoauDa0w2pvWGTf3wSmV6AvkkcqiJiZXphG/TpGmU2SKMwGNWKaVXoCzCiDQsC9cdx9XLiKG3abJCWCbCiIsrF8NtGtsQSjFgEd8FiOEWwohrepwLhBGlYAg3bHw8mG8l/gBrmkW9lGAYwXZ1O+7OXEjknke0o+4v2JZud1/mqTeueiXTiVwmE0WuS+8+OrzzudeiFnVx5OK2d6BeM6Oo4R1dH72qRXPSeBS53ZAzD9AItKO5BNs0LIsYwoSIHefCACAxBJcSFgTpGUo6jshyh5serAUGg3EhXVsaPJC4/wLOCwJypnQdK9AuAOfEY06yYSTNoliruioCh0YARo4fBSD5YgZgZPaH5eUTx04AjEy24YxIDbZnWhOtpfmJIsBIa6IE9Q88ttqaDCNXOlwqtiraTZAD8Jgo1UuNuoaRerFURVeIXQOoYzpEBqlA9aSCuzT1lQrUROqoxgr8SjqMpGm0FRixEESyTCmBVRFDAIxw0wEg8bAka6CTLi48ru2wAGAkMALXZQ7AiGPCUmO5sE0TmIAmwoZtmsD00WE9xPNzMvABRizH90Wyz4ykWbRtYUS3q3t/1+Adb72xlcg9QJ/gPa88+U5mXU2rS++9/P6Vr7xEN2J3Re6+TKQeM181MPAItcaLrqfI0TjNSeNdkaORW4cvAYwYWb0eCCHMyHFuGQxkIYwYaATAiGUKkNIwopTknmt7TCjlcdsGpzxPO2VxkAQ3KtAF/7hEw0iaRWth5PjpM2fOnD4FMLK4uLCwMDcHMLIwNwM6CTAy1W42W63m0lKz3Gw2SyWAkbBSC8MQD4iE5RoYdO1qeJaDUyHkimtdu91xK9NhWK+DCxsFGqqXyNXrHZdsGEnTaEswwvRvmALDUAAjwrQsS+BhNc/E5cYDGFHMA0mAEY+hkQAjHBceGQCMSCGlDFyAEamCIHBcgBGLu24uB1jiqgA3epINI2kW9c6d5MIItqtDXWhN6xFqRUeVJ+hOt/vmrtM+6zfYHnvh9R0vPN4duZ0PxG3vQL1mRlHDO7p+bU2L5qRxmpNqWjRyaWBkvXgsGcuJ5caybfhJItdbyd6mSbNoDYzEmo21HGvpHJrvrWLnecOqd57PUtL7jKRptCUYieV1dM6FJ1Yulp/zI435Y5HG/fGOxjpm7/heULIPsKZZtF1hhNrVXWDkrv0gOpPzLp662YOnbh58Oz698w7eB9W1wUZ64c0bn7+FPuW+gWvuGIC61yODA522d6AeM5Oo4R1dj692RY7Gac6+XXvgtA+NXMTIjWxM2S3IWK/ENz28rLPo1087MmIdi/VRrM9jfdxLn2xa+zemJP8rkqbRxV6MNrjIbF4jmcQqzaK0AyvplduiyJEoclsXzRyr911S5/2zUxjZiBLQZ2gbZhHCyG8f/nU2jBz6SB46qmHEdZQ7jjCS22fzj75BGMk7PL/3E2QP2+U2GnTShjGgizy4/Zoz7HwQuXw+yO+jsTXOAQcwcuBA3vH3o8Ac2EfOznfcAXD7Eg0jaRqlMBIpzaLzZlHSbu3tof8VRq4fJFrc078j5tT+qzNbFs2cmMilMJJJs+gcMPLHr7+vg5FDHx36QsOI49qOizDif+PbDsGIDz/GNYL48OOzjsvv0zCS35d3CUHgMncvOhzL74+c49CrLjqEkf15mx8g8HB8J3L52ME7DlxGMPI3e+f220YRhfFtc0ENCS0JLbQCSqmoyv0urgIhEKgIJZ6dmd2d9XrXu2t3vdiJwIpTRzg3UaFIhJdKvFYIVF6rqkJV3+h/xjkzmyV1TJU0RnWa+SLZn45n9yHnNPn1zOTsviyjC7uUhhFdRQ8NjGTj6qCz9drux9Vh/tTIOdDTU8Z/6skPR4Zf2B7u8YjlEanjRr+kYeT/ka6iHjBy/e/r22Cks+YpGOFccCphJKQVImHEYiJgjuqHiMCKwUCsCDGEERaIIIX3zDmZIxJGooAlJI2Vo+iiKE1Y6ooIlKZpQHIX/OsGuzOiy0jDiK6i/TYOfg/qPYF1bPcYqV67ktBbuLd1fHyod+YeuC7sUhpGQLqKtsPIrRsXr93sgpGON2utIozUCGGmQBixWEBpiDCCoSQEgbNMXzouHcIId5krYhRxGfHRRNKh8XlAiJAuUC6KAnAsQpEgNRM0EEvdLW6wz4zoMtIwoqvo4MKIGle3l8ypkXNPjbw7PHJMDYY7/MiJx8ePquPGeeZePXJMDYxTa4yTIxOfY+ZennjZeADaw7g6DSMgXUVdVQQ9kds3L976624YWWusrl3yAEYcUbC8wK2U620r9YvED+uhY1JKXFEJw7LrgavUQoxZJVcgXJiMEaIc8oYPTkiX+LFITUI4cknuIkEIcV3ck/EBWUw3lS5Al0ZR4gZuAdwgw4guo13/MNIwoquoRxXtF/UcV/fOxKkv7xsjDz2eEWE2Qu7w26+9/dqj6rhx3tMag6VyYJxaY7wEYHnMOHJ64k3jfjS4/xk5oDBy0Kvo2sW/v7kO6oKRUq3W4dgZEQXGAruMMMIoLdE6wEiBMObi5kxc4IzZYDAWMBsPsEYz8CmPQRHGAgecwCuCCEKsEOQOrmVRHEUuLJNnRoSJLpLOvcsNdmdEl5HujOgqOsidERhXBy/G6MdTe8+cGgx3+BB8fdrV0zr7zGk1ME6tMQ6PjIydNo4Agu5WDz5zGkYMXUXdMIK7NBdxn2YrjMw2YKvGWgMY8QBEam4Rtmk4bYcedkYqLnUit4II4nqxQxxwFddyaqQCMCJcGgnEjdg3062OCXBpIepyUURcIZiEEeyoBKKHG3QYOfBldGGX0jCiq+jhgREcVyf1zJk+ZO55dDJzh7oyZzz7Ob5layCJU8bEqHHkveFRY7d64JnTMGLoKuqGEeQQPDdyF4yUa7OgSwAjjMspUwAjJSpEGDv10Ocppb4IQ3DU95ULYBE4gAzmgyRuBLljSZJkTsVyhzACnwoB5OEHqZ/4EkHA+ZsOrh3sA6y6jDSM6Co6wDAix9U9NgVnfs7uLXPDZzZHzqnMdW2wGR89Kt+yNY+eNN58ZxTSfX54t+eMH3zmNIwYuorue+hZOx96FofdymPxFjm5i3q5h2fomS4jDSO6ig4ujKhxdefHh2Fq3P1lbnPk3CuTp7KRcypzXRtscMxHZU6tOX5y8oM3MHPG65DfPar/mbuSq5NrLVeYazZXuF1OD1VyiVx+D3m59sM4eF1FO/73v+tfGd/0RdObGuTfIrqMtpTRH7l+yPVTrpVcv+Sa266lHmreU/M707QxsNJVtIcfRvdC2v6rn0PP8HX/qzeMLC52ZtYljHB7mnsSRjqe3VmVMGLxglWTMOJZtodMgjHTKoYoy7KtioQRi9vMd1AskK5SYRDzBMIIhjwfYSTgdkA930fnciphBGLEkjAS8BKxBhpGdBVpGNmULqN+wcidW9dvKhhZX+SLVySMrPzYWbkqYWS2DQNsJIwszPqtFQkj9bZfX54DzbbF7NK3CCPVqqg2l5dA0jURRqqxiOebKHT1LQ5hBF11HgQuUq4KsWo1D1UHGkZ0FWkY2bf6Dxi50mk0FIzwEmcKRr7rfFdWMEItyysjjNBi0StKGGEUVFYwQqlVRhgJLItzBxUwdAgjIghsKmGEEUYowghjnBHLB3EIEYowgq5EEUak0zAy2NIwkkmXUd9g5Mbt3+4oGNnobKxLGPlz5ceV7xWMoCSMtFoLrZaEkXa7Xm3PgWATsN5uIoy00bUUjMT1cB5hJHaqTtRExXE1zlxUjaJ5hBFwIppHoRMKRkScxNLFAj7VMDLY2qcwko2rGx2efGJn4+rGTj+JfvP137m1j+AzhF7/bBgbZZPD3X/2jS/GGHo13u7MyFj3MZ+xnU7E7X2Vumf/YOQyX7SzzohnNrLOyGrjUtYZKXMqYcSyQu5JGOG8yC0JI4wXSwpGCKe25TjKmUzCCCWs4COMBMRy8TSjRBDTpj6I2MxWMELcwHQljBAbnDXIMKKrSMOILqO+lhHCyDX4kjCy2LjcUDCysnp1NYOR2q+1BQkjs+FcbUHCSBg3xfwcqB0uOKHqjMR14UA/BB1gRFPCiF/145ZEkATcfOYSBSORHzMED3BJnMYKRhIRVBWfiCQd7M6IrqL9CiPZuLrxt4yjO8LI3t/f/ElC50eHew3QfwZWHRtR1+br+505vGcfYaTTWGysI4yYBT6jYKRhlfkswIiamFmU2zSceGZZwgixATIghs5C5zjFUomYngMSRLlKhRPbJRJGbJvMBAJhxC7xAvdRrkkKTG7T2IVSIZDbNODMYKA7I7qKNIzoMupnGSGM3Lpx58pNCSMbjfXGZQkja6vfX/pZwkjNm/WWEUZWwvJscQ5hZMmphH5zDlSrtK2WPDMiRMjqS6DcNZsirdBqEwROJLmTsfmqEGmC4AEuyZwQCRN1MPVEREE82GdGdBXtVxhRkDd6SpodZe5c9iTkQ/gk5CdODOHfNR1+evO7NpRnbuvR4+ffOndu9ANj7PHxc9l4O7Veja5D3ePOKIhPDj+r1mefqrC6p4qrew6deGLyxSyiBuTtflwdwkhj/XJnA2FkxutwU8IIkMhGQ8KIXStTImEEnMfbACNlk/q85DihcgRPqxbNwOJ2EajELwSM28Kp+IRwwBa/Ijwz4KZJqfCpyYlpWtT36YxLTNuyfM+asW3TZsyjVsG2C+AGGEZ0FU1oGNFl1McyQhi5ffOPW39JGOHrlzcaVwBGfr/081Vojlz9aWWOtpbbtR/nAEb8heVWGTok3y5T2KapLAGD0FZd+MvLc0tNWg99bwEbImk1pv58a6k5z0SU+PU6kEcqBPWrACF15icpumqcpqlABkHHEukSwUgqYnCpSPFBSIMMI7qKJvYvjMC4uk8++mjk851l7sJ7xqm3hk6cfezI0aHxqTe/Hjr+3Flj8uj2zG09evzVF++f/ORZ48L540eOwX3yzGWj60D3uLPSh2eNo9l6+PTM11nm1D1VPMvc12emxodURA3Iu6/OyIbNuc0RRqZt2572AEZWbc/zSqsAI+UZzrmJ2zTtGW5ZJeyMONMEroBY6Mwo51SojFUAS6zMVYRtAm8E0BmhM6ZNCniAFZ1bwAOs1rRplkq4TcOmCxDEbRrpBv7MiK4iDSP/sHcevU4DURQ2XaL33nvvvfcSW57iBk6MaY+WgABRRWgCIRas+AEsaFuEEELs4J9x71zH4ACBIAMOmYMUHSbzBundq/c+ZsYnuo1ybKPnn16/BCGMPAlqtZqHOyNP8QL946cPAUa8I5Ckhzsj592j16+XcWfkKsT0HjkEpzNn3UMHjzhgbt2ODx87fkY9RONCGM0ZpJLLAuNo1KMzwklcVZw5fEgd0xyDEF9woENqHpjqmRgg5Di4nhhcwY9pdBd17s4IxtVt27h9yeBFv1S51Yh2s6Emo8dvhdfpfYxl2/pvMr6pXEZ7FkwYvWqLsQZmTftSuTS6DtRiZdL60b2WJPOTd5VoTRpPKjcdemY2jVBA3m/BSK3+5AGe09RrvF6vsBrAyDXv3r27eE5ztBzAT4KgDDByITh67qg4AjBS5uWDJ3DsaFmW4YCmDMc0PiufqET4OI3LDp2ohIfhmEaGcEcEd0YcLhwncBBGJLCGxAusLoz5CkZiFvqu8AFGYhb4sSj0nRHdRRpGdBvl20ZwSvMcd0cARh7BrsgTPKd5ePHcs4dPr70AGLlaOX/nfvk+wMjtCnDI6fPwcsU/e/72CXicBvZDzt46DAZ2RnpuXzqMd0aunDp+SblLPUATVQSPSz1wOaQnccfAVRWMVNHhlRHRc/m4cmfinp5jPWqPxIX7I9WCw4juog6FERVXN3457DvNa7dys+k7OG3T0t0/qdze9ft6b1pnDMRZmcrNNBK1WLl/v37zDWPM3hFDkvlUORqnNWk8UzkaGTfhd2EkenzjxoMb9Sf1KPBQACP12hEUwIhPcZoAIxWvjAIY8YUDgrHUAYKAAwGMAE34PjiAEQ9OYRznxCE/jH3f9QFG3CB2XRdhRAiXXIWcCzAiIjTFhhHdRRpGdBvl2kbPP7z/9OkTntPchEdpHj26cQNg5P79ixcvvroDMHL9yNWrV69cBRg5dx3cpdsAI9ePXEHBwzQHq1eqaG5VT/RAvt5lgJHqocRdOnisB4TP8R7LOBDCCDncGUndGXQEI/Bgb9Ef7dVd1KkwouLqlmweOqbvjF/e05rfZ/CsJY2dJ8MYMn2U0fqAbeGarYPWLMpWbvTsRnSdAWqxMqmPMXRSMj+zp6XWpHFak/a0aAQq9w9Cz46koWcnDiZKHRzPpKFnh9PQs8rhRE7DVJxOCj3TXaRhRLdRDm2UV+jZ2e+Enl1qFXp2uWXoWfWLK37ome6iToURiqsz1vYbOecXb/vsT+7k7MFbNxvw1s2cnentnRE7Vm8elDlgI63ZPnz1GPouN+Lt5g/ul8Tb4YQWK5Mm9h3Zy6D56t1M5Wic1uwzdsPIBcnMHConU1mpeCo7FWuoeYjGfl+d8GtEd9HfSGAu5aEif6iAbqPvfqrAzVR+qtOp/FROKvfXFP++Cvw/I91F/z4OPq8fRu3nwWwan1aOhJXLRbQyqfVTUm382+3CiGWVLNYEI5ZlWqwJRnDM6k4Y0V2kYaQh3Ua/3UYEI28PfGyGkRuPo2v3FIxEAYs8BSO+J92KghER8jBWMOIJGbkIIyKUIo5dkIhkJMgJKVIXCgUjMA8nxj9yITkhwCYuhL8UGkZ0F3UqjFBCzDpgyTXTGmNzB7R6xfpRygswH2w5DR1MtLih76CUTfvizBkTR/bbbmSE8+lrfy5a+Z9XjiDEboYRVBOMmEgjdlfCiO4iDSO6jXKCkQ8v330LI/XH5xSMBDKSMkYYcT3f88oII8AJUioYEZEnA4QRBA+JvEEuzLoQjIwRRtBxpIys4zxuOEkI8rWTstAworuoU2GEEmJAwwf/QlxdBibpM5Z/rOUrjeH0/k/m91MaY+SlvGHEZOa3MMLMZhgplayS2Z0wortIw4huoxyEMPL64+tmGLlWu1u7oWBEMsEIRryoIglGpBQsVDCCTigYkSHngsAj4Ey5KHUhh3c9hBHJJSMEkazhOJe2jFGy4QTMt0PlJLpCw4juok6FkTTZdvLUNoL8KeVlfL81ffsNpyyW3gPGjhg87OsbPtMUdFLiC+W40Hz6Whqh4zFaISflDyOmaZeaYcQ0LdP+BkbMA118TKO76BtpGNFt1DaMvH9z8uXbJhiBNGjvroIRzqQdqWMaEXjSx2MaYAbG1DGNK8G6joMmtEMXxSUAhXJSBg3HJMd3EUE4I/BIHXIHE8rBauQkLMK/uGLfGdFd1MEwAgkxoCHT2vtUoRGEhY2Ul96rlq5aOujrGz6zlaPEF8pxofn0tTRClaMVjH8iiqtrDSNMWmYzjNjcMrMwYpcsq1Sy7S6FEd1F30rDiG6jNtvo9ckPb0++f9cEI7VH9x7XEUZiWwace55/usxdX0TlMhzXMMklRxqJGUCIBBqJeajowYU3A2QLkTiOTjBOLhY2YzYPozgWLHFCMtvmPIy/djDf4jJxJriCw0i3d9GBtlUQGIGEGDwNG2n8ZuUoi6V3L/izzfhKW1Xl6CFrynHJVE6NUOVoBeNf6ScwwvDJphLLwAgrwWuJZWDEUhXozmMa3UV6Z0S3UR56+dF6DWqCkUYCqy8sxjjHY5oKC6IogGMaNwROkNIFGAEXBtIHGLEZ8gleFLFtJhk51nAWrCHBxaGFE0Ucf3GCWTZvOCbJ2bYNLlYOxop+gbXru+hA2yoGjGBCDKh379+u3Ex0qnK90GX3tKhyVKFM5WgEXidivktuyh9GbFMCkNgZGLFNzplpN8GIZVslqzthRHfRge9Iw4huo3ZhBE5pTsI5TQZGztXu3byHH9vrR1bgCS4ARnzulCtRBY5ppBW7AqMUndBy/VjtjDAexwpGPNwW4QIdQ0dYwkUYKhixWUQPzKALQnTcCoX84gJ0DJ0AJ9RYwWFEd9GBtlUMGIGEGNTgGb9TOUyVoSwWqhwdsCUagrd9KPGF6kTzM5XbPHTUpDTfJQ/lDyOWCSBgWRkYsUwLlYERs4RDXQojuosOfEcaRnQbtQsjyCFwbyQDI/U6pCreuAYwInkEQhjxhA9yAEYCKUAII1HogWLHQZqgx3iRJkDoeJQ4KQW5OHFx/BPHG07wUBT+0V7dRQfaViFgJEmI6d/PaKdyjZSXxSMnJikvVLlMKsyKiSP7bqfEF6oTzaevTUZ2TRnRL813+SPSoWd/RLqLNIwYhm6jHNRO6Fmchp6V09AztzHm+E4iN3YTZV2zEXGiX3cdE3rWzV10oG0VAkZStVO5/0sHWspOZaay/omK/GtEd9GBTtFn9s7kV2koCuM44IjTc57neR7ibEyMs26eVG1tLW0vTa0F0ydC8WkeEIwxURNj4t6FsjXGuHDnn+a595RqtSAqGtTzLcjxFm59nA/yy+3tR+rvEtkoUef/pC58q7/MRv+tix5GGklQLdLNSGORbrdVjnQnkpcg+0d1kTpHMJIs+vwTjAycyEYJIhghF/UKI617hdYzASON4pX60xHQ03pRq9egrNWKQbb4QsBI1dSqYwJGTFM3ywJGTENndwSMMKbLHocRZsqK7XEYYbLCbNsDtSvbZpYi21y8stg3ldWuGFQ9wcjKhd95/Ld0rosIRjqIXEQwkiyyEcHIwOm/dRGHkQf3RhBG6sV6c4SrDlUDYaQK25FucRgxzaJZRRhhVWYIGJFZVbYEjORlM58XMGJbcpYJGLF0psieh5VuCRhRHOZYNshymePY7cplvFIcMYaV6wKMJGXnpvZOHBrfGSOndcqtnZyZ3p5hz9DXmbVTJ6bT07HsJUF33NL04mhimC69G6vks3dX/FWr09MmEYz0V+QigpEU2ejnbEQw8qXIRb/PRRxG7j67+1jASD14+iSEkaBm1AWMmMaYjzBiqBUFYURWyrpxG2CknFeqV0wOIx7ghiRzGLFsPZ+zOYwoigVA4Xm8UlyJcRhRFMfNCfBwcorkhJUuubyyHNcZVmxRSaK6mJSdu2XB/PmrJvxE5yaFM2CAfreg3O4HcEPyokwUoLvhODz0oXOoyQQjfRa5iGAkRTb6KRsRjMRELvptLuIw8qA48gRhJHjS0GojXIFRL3Asqd3Ka+aVcrMJMKJmZckbG7s5dlvNKjmzUhkre8oVV6qWb5c9W5ekHPPKdzxFl3KAFnc823Hca7rJr85ks+4lhzHPZq7jXnJlZkMFm50dC6vhYdey+KoJ3BWuWPbn6mJSdu6WqWvXZmZ27tyGiTvaKbibh+YtmMBvox6/DN8RnAE7h/dBxRqEW4wxKXf24vSM1Z8TdOPJuvzuqCWbMEd3e/rwKsTIbmdHJh2auCKFr8KjYhTnxHHsHATnzRva3B5ZeHAeTPr9uDqCkQ4iF7VdNCihh/8AjJCNerQRwQi5qBcXcRh58uph65GAkfu1kcaTEa77zVrdEDCiVV4UDbFnJOtVTFmsjGRNz5DH+MqIxpgpi5WRrJxnfGXEsywlq4iVkSxTJMUD2Q7TRWXbWdnJ6TaXC7J4wVxJEhWzHCmnxKqLidm5yw4f3tZ5TevcgdSSPZiCOyEzd/f5CfNXrU0NzQo7hzOEnZsyJbamtR07FyblzjuW2j7rc05MPFmX/3vNyXaO7pT9OEmXs6MOr03NCvN74ejq82HncE4cDzt3fvXczIRwZOG03anttDLy8yIXtV1EKyNkoz7YiFZGyEV9dxGHkQJsCrkvYKQQBEFBbGC9Yhim9pTDyOW8YWjiMg386KKscRi5fVnL53UOI96wDhWHEXs4q+g6v0yj567oksxhROKVzRlEuiyJyral4ZyTEwgC94C7ClbDUDGolEs5J15dTMrOnXlw+8zM7I6d28exDYPneCIurH7tPD7pCOIZztBxTQs7h0m5nDZBUefiybrYOczRjXWu09lRB+eN2x7m94ZHhXBOHA87twpmXReOLFxCl2l+SeQi4SK6TEM26oON6DINuej3uOjhyN2HfHUEYKT5hK+J1OChqdaePlWhqlW0F80X6hjASDlbgQs0twFGvGy5UlYrACN2rnzbU+4AjBjDXtlWPIARB6gjz7w7/OKMbWcFjLiSbbscRqBiUIGUnMMsK6zC22n0axYLq0tYXUzKzt2/Ad61jb10bh2+OyuP7DiJncMZunZuySTsX6fO4VFc08Ic3VjnOp19Ujq9KZWaf3rOjDC/FzuH4zgnjsc6hyMLFxOM/JLIRcJFBCNkoz7YiGCEXPR7XPTwQQPoo3UPYKRYbHCJ/athVQuMMqgCMGLKRVAZYMS4Ua1Wix7AiKxUQR7ASF4xTdO2AUYkyzSBOu54LGsxxjiMRJXNXF5x3HB0FlZZ5dvKCauLSdm5e9Lz52ZWd13T2oQpuLiqBMG4q+a2Oydm6HiBjafjhp3ja1prZ32ZoPtlsi7u9sEc3VjnOp4dT5uauTTM742taYk527PNW9de08IRgpFfFblowmyCEbJRH2xEMEIu6q+Leg89u/XDoWdeQuiZ3S30jHWpLiZm567IDG3uch/U2XC/zSm+o+YQ31Gz/gTiWXuGhAts2DlMx8XOid0+sQRdnBM7tzR9ZGsKc3Rjnet0dtSSiUPjwleJo7HOtWfblEnPnrDgEPyNODL4n/9vNNBB3uQighGy0UDbiL6M/iMXff5RgZeRnkVKSmBtRmpEqrc1mqAgUumH5bf14wmsiTqyKOwcCjHyjwnPjurlLin8//1Nd9P9XZ9/chHBSCSy0SDaiL6M/iMXcRh5d+6jgJH3rTdvEUZa9+63XgkYadTvNxBG6qP3600BI6OBOtoQMBKU1KAuYKRUUkujAkZKvlYKRkGAEiqvgsD3Vb9UCgIOFxpUXGIsqniJR8NKVVVfjPAKHpNDz85MnLEuGtswOf6I/cNMF8x3mZlBWjw0cXrEoxPhmQsPp4eOxZJg+i88O8HIIIlcRDBCNhpoG9GX0X/kIg4jH16/Rxh5/ujDe4SR55DFGsJIvdFEGOFCGOF6IWCEU0edw4hgCAEjvgEIEcII0AjCCMgQMKIihMQqzVexUqFCWNFUX9MQT3jl+4mhZ5OWz595dG17bP2U+CPvXA/BL7iJZtbS2bFn/oLSQvM7Hf6nE5j/rs8/uYhghGw00DaiL6P/yEUcRt58fIMwcv/9kxBG7r662xIwUg9aQUPAyGjQLI02OYwEpYZfanAYAf7wfQ4jo74fFHwOIwFwxWUBIz7ous9hBLhCu+xzGAGu0C6rJVC8ui6qQiGs1CuqerUgkKWgaVcBRhJDz07C1uNdi7r/qhBmumC+C+asjJ+8YE5mltjhE3UO5pmER/GZeKELE1kwtWXgdK4nEYzERC76xN4Zu8QRBWF8DSpczAVisEjsUqUSg0WIQrQKHAQCwu4V87a9aoU5pljueeBbbK64QoT0NpdWRETs8qdl5r1TXDniSUjYzc4nyMe+3Wo+1x9v3s0pjARpjGoRI30ZNShFDCPXF73JpcDIzegWRk5HP8YBRg7yYhhghHgWqxMYKQQ8qCiOC4dAMTpXWAsmick6a8mYmMGDDXhHNudLJo35KaIsMV12RJiZW5ckSTcG77JkPwUgNHypa4AITOYdzhx69mHx9d727qNfcfjqFg7DnJVnWxtbGytywude5fY218JquDNULkxkmc6JqZSqOvSwdn//mqKaKKq0NEZ/RQ2Dkaan6Jy7NJe96yuBkcHF2c2ph5FB/+Rw5GFkfNR3Bx5GhnJYRNo038EVRP7MiLEOsZCdEUNIYWfEIHvLBhAyIDZkEGLIc4ERYEciA2bqEjN1yC4FMZAkKXhnkowd4syhZ9HW0s6nz/NXLsxZebbAP7ulPa3t1ecfp6vlyr29m9oSVU2duaQwUpKmSHdGRBqjmsRIX0YNStGk9/PrOUtgJBuPx+ceRrLBYDD0MJIR5UMPIxliPvQwkgHk4M+MMD0QCIxQmiCCwAimMTvLkn0RgwIjcRqDIYYRdik7opLrpibAiHfILtnvGhCH4vgazhx6JtpcfkLl3onzlVt40GBbaa2F1XBnmBAjC3dVrJo6c0lhpCRNkcIIS2MU1SRG+jJqUIom0qXpSZ/m7GLEIDLgPo0cGZHdEYaR4/xIdkcYRgriHg1Km8ahLQp0DCMOyDl0Hkass+DbNClZC7mHEcqRctkZiZECjJgU2LHEoXeYdAFh6gwCyuI3g96huFk7I2G+y8voy4tovsrJfJcwZyVU7mGDbWchrPo7w4SYaleuM5cURkrSFCmMsDRGdYmRvowalKKJcIg/N3LGH6W5upI+zQl/lKbfPzxkGHHOt2MYRpxMZXWOYcTmVsTXLXknMILShcmdtYgkEhhhl7PLA1YIjLATEd1z8DuHxqDX7KFnb1aXlh+pXJjpEua7hDkroXIPGmzR+8WwGu70E2KqXbnOXFIYKUlTpDASRRqjqC4x0pdRg1JUpaFnWHJ/PvRMfv+/Wm+zWu2nqvWvH1iPaiVNUTVS1G7VOUUao0qmqG4x0hTNVeIK/ktrWOW82k9/onoPVEqaol/s1CEOhEAQRNHOhhGbsMhFIgknAAECx/1PxAUgoRVV8J8Y1xkxf1okCjJyo7haqMiNYhT5K7r24Hw4xYfw/v9UJBIFGblRXC1U5EYxCu+KTtz/cpIbAzlvqIiM7CiuFipyoxgFFV2x5Cf0BpD0horIyI7iaqEiN4pRUBEAAAAAAAAAAABUjfV/iIxvVX5x2bZWEc1UT01m4DOX0gds7OzcQUsCYRCH8T+6GwSrbsYKhZi4WG2ewqiIIgoyv/8nCpa51wTLy7w8PxBPc5qHOSyrVIQEFVlG/orIKF99RRyjgJrFrinvXZubyuFwVUirTt3KMzDaC4FQEVJUZBn5KyKjbFlFHKN4bp+lrhtucxoXUlWrrv48wObCoSKkqMgy8ldERtmyijhG8TxeS+9nclhPJm/Ozb2o/zg2d1ocp0IUVIQUFVlG/orIKFtWEccoHv/q7jQrDwNvbtbo+yhEQUVIUZFl5K+IjLJlFXGM4rGHWj6j/bDPtOwLUVARUlRkGfkrIqNsWUUco3ia9dj3uk/bqr188mzO3vbxDNTSciNEQUVIUJFl9I+KyChbVhHHKKCbarGVw64s546BzcfD61f/OyjPwGdRXNRCGFSEASpyZOSriIzy1VfEMQIAAAAAAAAAAAAAAAAAAAAAAACQle28KE+0PNev+KeXn/buZSeZGADD8PfPgf7VocJolQE8EswoRjFEhcRoPETx/m/I0TjGtRs7+j6bJt1+77JJQUX4REUIERk1VDn1ch1Z983lvAAqAhUhCGTUVDeFKsOLxOhq2t4Yye4k2xNVoqXZG74vNYtkztp5a5E9K84O8o11tUx73pE5bfN5IagIVIRAkFFTjdKs+yRZJ2dGOhrLjnVbqBL1vRv4erkdDa87/trFL6WWM99f0+NSpiuAikBFCAQZNZbfiu7+yTqtDtI0X8pO5AeqRGMpP66XK9WbS2Y3tlJvcb6Spslc5kkAFYGKEAoyarDL4n25A72xcb3cTEri41waRzItbRWqjo/lpqq83QJUBCpCQMioifYn0nNXSaw1O9FoX/ZIt4U+l/MD56dfl3spdTjzm6X8OcuBikBFCAgZNVWrnycLp4fMqLedJKv1a596OQ03zf+vy2X3+WJduybNT1gOVAQqQkDI6NewTgAV4cdREcjoD2M5UBFCQEUgIwAAAAAAAAAAAAAAAAAAAAAAACBIrwVRWjVXNEWmAAAAAElFTkSuQmCC",
            "text/plain": [
              "<Figure size 2880x864 with 8 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Mkabaaj-pqVa"
      },
      "source": [
        "After training, the automaton policy has learned to take a single sequence of actions with high probability, solving the task:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 625
        },
        "id": "YkDx98UDkY5c",
        "outputId": "e4c684da-2635-498b-b0ca-8a5ea4c54d86"
      },
      "source": [
        "starting_positions = [8, 14, 15, 17, 20, 25, 27, 29]\n",
        "\n",
        "_, ax = plt.subplots(2, 4, figsize=(40, 12))\n",
        "for i in range(8):\n",
        "  r, c = np.unravel_index(i, (2, 4))\n",
        "  starting_position = starting_positions[i]\n",
        "\n",
        "  steps = unroll_automaton(trained_log_routing_params, test_example, initial_node_index=starting_position, rollout_steps=16)\n",
        "  ax[r, c].set_title(f\"Starting from node {starting_position}\")\n",
        "  show_automaton_steps(steps, ax[r, c])\n",
        "\n",
        "  if i == 0:\n",
        "    ax[r, c].legend(handles=legend_items, loc=\"lower right\")"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 2880x864 with 8 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "o5Xh-AbNm5E-"
      },
      "source": [
        "Some things to notice:\n",
        "\n",
        "- When starting from node 8 or node 20 (not relevant to the task), the automaton moves to the parent node, sees that it is not a return statement, and halts without adding an edge.\n",
        "- When starting from nodes 14, 15, or 29 (return statements or return values), the automaton switches to state B (yellow), walks up the tree until reaching the function definition, and adds an edge there.\n",
        "- When starting from nodes 17, 25, or 27, it stays in state A (blue) and stops at the first while loop or for loop it finds.\n",
        "\n",
        "(Note that different random seeds or hyperparameters may result in slightly different state-changing behaviors for this example.)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "a4ToiGATXOf0"
      },
      "source": [
        "## Manually building the transition matrix and solving for the absorbing states"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sph-p0wtXTOV"
      },
      "source": [
        "The sections above have taken care of running the automaton on the input graph automatically. However, if you want more control, you can run each of the steps individually."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TgcSfLWOZfpU"
      },
      "source": [
        "# Tiny AST to make visualization easier\n",
        "the_ast = gast.parse(\"\"\"\n",
        "def test_function(foo):\n",
        "  if foo:\n",
        "    return\n",
        "  pass\n",
        "\"\"\")\n",
        "\n",
        "generic_ast = py_ast_graphs.py_ast_to_generic(the_ast)\n",
        "mdp_graph, id_conversion_map = generic_ast_graphs.ast_to_graph(generic_ast, ast_spec=py_ast_graphs.PY_AST_SPECS)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "jIxScctGXqH5"
      },
      "source": [
        "Instead of using `graph_bundle.convert_graph_with_edges`, which builds both the MDP environment and the extra edges at the same time, we can directly build the environment dynamics using the automaton builder object:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Xgh0s3TBXp5K",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "2b57d7c5-0aaf-4f24-8cd3-03024e71d4a6"
      },
      "source": [
        "encoded_mdp, mdp_metadata = builder.encode_graph(mdp_graph, as_jax=False)\n",
        "\n",
        "pprint(summarize_tree(encoded_mdp))\n",
        "mdp_metadata"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "EncodedGraph(\n",
            "    initial_to_in_tagged=SparseCoordOperator(\n",
            "                             input_indices='int32(47, 1) [3, 552] nz:1.0',\n",
            "                             output_indices='int32(47, 2) [0, 35] nz:0.96',\n",
            "                             values='float32(47,) 0.98 \u00b10.1 [0.5, 1.0]'),\n",
            "    initial_to_special='int32(13,) [1, 153] nz:1.0',\n",
            "    in_tagged_to_in_tagged=SparseCoordOperator(\n",
            "                               input_indices='int32(158, 1) [0, 548] nz:0.99',\n",
            "                               output_indices='int32(158, 2) [0, 35] nz:0.98',\n",
            "                               values='float32(158,) 0.97 \u00b10.11 [0.5, 1.0]'),\n",
            "    in_tagged_to_special='int32(36,) [0, 152] nz:0.97',\n",
            "    in_tagged_node_indices='int32(36,) [0, 12] nz:0.97')\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "EncodedGraphMetadata(num_nodes=13, num_input_tagged_nodes=36)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 51
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BGIXi35aYxPb"
      },
      "source": [
        "Each of the fields in the `EncodedGraph` object describe different parts of the environment dynamics. However, they are stored in a sparse form that is difficult to visualize. In particular, they are encoded as sparse operators that transform a policy into a transition matrix, by indicating which policy actions result in which state changes (see the docstring for `EncodedGraph` in `automaton_builder.py` for more details)."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "y1Anv_D3eGOA"
      },
      "source": [
        "This `EncodedGraph` could be fed into the high-level Flax wrapper. But it's also possible to run each of the steps directly in JAX. \n",
        "To obtain a transition matrix, we need to combine our encoded graph with some parameters. Let's use the ones from our trained model:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "k-kEAAF-YxPb"
      },
      "source": [
        "learned_policy = builder.routing_softmax(trained_log_routing_params)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "E4Pt318yYxPb",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "4c8d6f8e-9011-4a9f-a081-5aa96e607532"
      },
      "source": [
        "transition_matrix = builder.build_transition_matrix(\n",
        "    rparams=learned_policy,\n",
        "    graph=encoded_mdp,\n",
        "    metadata=mdp_metadata)\n",
        "\n",
        "pprint(summarize_tree(transition_matrix))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "AutomatonGraphTransitionMatrix(\n",
            "    initial_to_in_tagged='float32(1, 13, 2, 36, 2) 0.012 \u00b10.087 [0.0, 1.0] nz:0.079',\n",
            "    initial_to_special='float32(1, 13, 2, 3) 0.045 \u00b10.15 [7.6e-07, 0.97]',\n",
            "    in_tagged_to_in_tagged='float32(1, 36, 2, 36, 2) 0.011 \u00b10.088 [0.0, 1.0] nz:0.099',\n",
            "    in_tagged_to_special='float32(1, 36, 2, 3) 0.063 \u00b10.23 [1e-06, 0.99]',\n",
            "    in_tagged_node_indices='int32(36,) [0, 12] nz:0.97')\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gIQYJ6HUYxPb"
      },
      "source": [
        "The result is still broken up into blocks, which will be used to efficiently solve the linear system. First, we have the transitions from each possible `(initial_node, initial_state)` to each possible `(node, observation, hidden_state)` tuple (in other words, the transition matrix for the starting state). The columns here represent the different possible start nodes and start states, and the rows represent the possible `(node, observation, hidden_state)` tuples.\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 518
        },
        "id": "pj2masM2YxPb",
        "outputId": "27a86eaa-7f15-4773-c7d3-bf83be64fc9b"
      },
      "source": [
        "visualization.ndarrays.ndshow(\n",
        "    # Visualize only the first variant, which is used for almost all of the nodes\n",
        "    transition_matrix.initial_to_in_tagged[0],\n",
        "    \"ccrr\", figsize=(4, 8),\n",
        "    colskips=lambda _: 0, rowskips=lambda _: 0)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<matplotlib.axes._subplots.AxesSubplot at 0x7f7905c99d30>,\n",
              " <matplotlib.image.AxesImage at 0x7f790396fd68>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 54
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPYAAAHTCAMAAAAj2hXLAAAB1FBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAVQNABFFMX5HEWRGDmH95yRBQYZIHnA+SIlDPIRHFmlIG21FCFtEOYNIJXY5VYxARIdHFGZGC15GLnwpeo47UIr55iEsco41Xo0fk4yL1kYqd44yZI4gkI06UotHLHsenIkkq4MfoIghp4UrsX4mgY4nfo4va44xZ44fo4YmrYEzt3lJwW3h5BglhI4ii40zYY03WowflosfmYo9TYpFNYEvtHxky1520VNFBlo9S4lSxWkkho4rdI4ijY1IKHg3uXdBvnFbyGN70lCU2ECc2TvJ4R/r5RpqzVqv3S+/3yVHI3RNw2tXx2ap3DO53ijb4xhvz1cjiI4tb44ubo5CPoU6u3U9vHRFwG9fymGh2jfD4CLP4RzT4hrm5BkMDhvv5Rzz5h0NCBgHGRwJFBwGHhs4V4xz0FaB002E1EuO1kWl2za13ivY4hkzLgYHIhkNJhaG1UkUKBIbKg0iLAl/006Q10OY2D6y3S325iAtLQQoLQYHAAnSsOXAAAAAH3RSTlMAzHja0xEHIN8ZuorwZ0q+OZWdVSmqM13Hs+zlQIH8IVUCbAAACbVJREFUeNrs3VerE0EYxvF3s7uJJzHFGDUade2KeqGCoGD3xg4KKipib9gv7IoiYu+9fFllDsY4PspuJpHZmec/51yeix8z7JI9mVlhjDHGXKgWhgXxrzGlYtSS0b7NsLhv0u3dC1RZ0tcoixR+TveMRG+WKrGhGdLtxRxUIOkb3xSZNM5jdjUIvuWHvVwfP9jOL/LlqCzsorqkeceWWjimIIC9XDVTldhQL/szKpCM5Y59D0W2o+y7d+/9Me76wP4jsg3Y4DY2W5UYZ87+chJFNtlk5559B0X2YNjbVGtUSdrIHjh7G4psst1iX9SHD+yLqAGy56kSGyLbV/ZzFNmOsm+jnGd/HTZ7gSqxIbK/3kKRTbZL7BMosvthz1UltkW2r+ybKLLJdol9BpWRrX8VZq8qsS2y/WVf0IcH7HcXUGST/a9y9uXLd89QZDvK/oRyn30aRTbZfbEXqxIb+p19Xh8+sM+jyCbbJfZTFNn/qDklEonLYTnW2KlaojJQGLFvoNKxp078wa4UpFDxii2lH+xwREZC/9hjRf3+3OOZF/ZxVFZ2/mYbst1f5EZsk0vaPlXyjyxlT+hM71TjeliPc8d++xEVSLbyxz6GIptsslOwzZqjmq0y+2PM/oByn/0ERbaj7JUossl2i/1aHzawR5upMvtjzH6Ncp/9GEW2o+xHKM/ZP093LNWDqOYU+z0q0E53bFalNcal/2+/PYoKtIPvmgVptL1hd485HIk6Yye6zx4TBEG1y1ZT3ojcZ+uLPCqJjBlxib0XFWinO5YnSavj0my/weze0x2n1aTVjvq9gc1XJTaUgg1yiv0QRbaj7EsossnOyrbtZtbLPoXygn1J+/GE7els+8jegyLbgG36jIhsssk2YF9HkU12Wnb2lqoS0LDYR1Bkk0127tnnUGQPim3BnY3sV/tRPrDP6cMPtqez3Te7VI+i6ugmzxyyz+ojLXtkosRhS+2ISsdepErMM2efRSE2bvJUtf/NM3apE6vdjn6xi8F4Uezu1ta8sLeigpTqckEkn4vchN0cJyL5vKQZsBvToyiqqU2e6djLVEnaLGX3lDv2NRTZZLvEPowiOyPbfBPUr48lZJM9GPZVFNlku8S+gjJgG7dSlfyIbLIHwz6EIptssrOzLXja1MvegiLbTfZLssl2nr0b9b/Z+JVSw2Vv0YcfbE9nm2x/2BtRPrB362MobAte52rFbJP9l8geAnuzPrxgb/ZytjejhsqeM9oqVfKPyCabbLKzstehyDZg2/aOEbIxWz/wU8ZH0QR/2D9Px2sFsYx4w+6ehVipurfIN/wx1ukHfk6utNs1p9gbUPqBn5MnF0ud2KWHSpCtL/Jxk0TqE31hdw/8rDUl9me2uwd+SiWKxjv15BSy3X9gbMAuBlE0TUrtcEIxd+xNKMCGbim2GxPGy7hq3+zlKvwiDVvZP+BBY0pRGmW/2NHYShyKlCK/2BLXG4rd3eOZE/YDM7ZMK+RykZuw41iK7VouL2kP1qPSsVujN7DA/Aa2WpVoWcruiWyyySbbCvZalC1viAKHiw2MvV4ffrA9nW2yySbbDvZC1aDYu1Bkk0022flk70TZyO5zlxXZZJPtFXsFiuz8spepyCabbLLdZ69COf/SO7LJJttR9kEU2WSnYVu2iZfs39k7UGST7RD7Ptm/suUT2CLVMNiXUWST7RL7AIpssv8/e5mK7IGxt6PI/t7enfQ6DUNhGD5pnDQptKXlJnQIDZd5ngUCBCuGBQuQYAES4gewBNZIgFjzlxE2rYo5FyVumjrx93btxaNGqRvJJ2CDvcybqqOtbrE7yZS0c2C1d0pVkv2YqyA7HmZTkqf+nGInaTZVR1tdYg9GJNmljrY2n31oHs0PJ+5d5ESZi7c0ydaOttbeNVVJ9hMuW7YrYIMNNtgtZVd6euDbLS6wwXaGvRr4SUcXqTvs5XQ8CoYTd9irWYg0Ggx3zX4rq4p9n0sf+Jkm5AJbH/g57DrB1i7yYBZFi3nqCjtc3dLIpW97OfCzhex3XLZsVy7I8rXABhvsguw7XGCDXT/7qmwL7O9ggw12O9kfucC25hGi6rRsXwZ2afYnLrDBbhP7KRfYlrFV92Rggw022Dr7GRfYVrJVYIMNNtg6+wEX2Naw92Vggw12QfYLLrD/VySER0HP7wVusX9zD3Woc8iWH7CzsjrYfkyx7xbb8/p0mIgON459l6sgO6ZYZJJteMazmWz5+tJmXuQbsEP5+tJm3tI2YHeFEB0Khv4w2D37tOyWzJRt43YFbLBN2S+5wAbbTvZ1Vb4W2GCvs7/84AK7peyrXGBbz76sAhtssP9mP+QCG+zdsq/I8oMCG+wD2be5wAYb7B2wH8iqYr/iAhtssMFuJvstl43sg7qhKsk+xwU22GCDDfZO2OdUJdnXuPSBnx0hhl132MvpeFlI/cQZ9p9ZiLJ04gz7z+RL2ajTfrY+8JPo2CRsFfsM1z8XeebHtt7Jr6iqYOsDP9Noz9ofsArZ+sDP4UyIqTvsJmxXwC7B/swFtvXsfRXYRdjnucAGG+zGsy9zFWQHie8f+X201YKTQaqzsi2zx30Kg0aeA9uEHUTU1KOtm7BTb+yNw0ae8dyIvThCo+ONPNH75TVXMXYcEWXTRl7kXzdg02SPjh9q5C1tI3bqiWlgydFW1X2ZKbtJ2xWwS7D3ucAGG2xb2f99tesXsG9ygQ12m9iPuMBuB/v5736CDbZL7PdcYIPdMPZJ2fpfEbCvcIENNthgW8u+LTuA/YELbLDbxD7L5QL7g/5xg13ft31Kltca2GB/vcgFNthgm7HPyPKigV05+wKXC+yL+scNtqPfNtjLbPkrclIGdlXsE9e5wAa7TeyTXGDvlH1bBnZl7FNcYIMNtmxPCHG4I894No59g8ujos27Vh2IWu+CbCvswcSuM541sceWvb60MPsSV1F2OIvJqqOt9bAHPcsOMhdmv+Eqyk6OWfZG5lrY4SwgW15f+m9XZWXYtmxXtsnO9Y8T7Jz56AM/w8Sf2Drw04ydc+kDP/sjOmrrwE9jtv5l57k+C7F3hMJZ29j/pg/8FDFRFBRgzzwv8syLvG0untGqnscltIGfPJvPI/M8qmsxH3uRu8IO/7qlOcNeDfwME9/rUrH6ZF6fNlqMUA2pfZ1J45kgUs/lStcdCtHXFtebugkalKVC+xNbvDilwN8zWFzxT55JXbF8ZGHUNFOLd5La4Jiy1QMqs9XzoMzilrBD72i5xa24yMNex2hxtfs6Y7bpXWk8IqPF1e7rTErmi3lfPZcr3ZGFEGKgFiOEEEIIudovWRlKKAVxZp0AAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 288x576 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Jl9Jw8LsYxPb"
      },
      "source": [
        "Next, we have immediate transitions from the initial state to a halting state. Here, the columns represent the initial nodes, and each row corresponds to a special action (add edge and stop, backtrack, stop)."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 135
        },
        "id": "AyA_fS4SYxPc",
        "outputId": "edb338aa-f3b8-4a81-8452-87c2ff13d4f2"
      },
      "source": [
        "visualization.ndarrays.ndshow(\n",
        "    transition_matrix.initial_to_special[0],\n",
        "    \"ccr\", figsize=(10, 1),\n",
        "    colskips=lambda _: 0, rowskips=lambda _: 0)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<matplotlib.axes._subplots.AxesSubplot at 0x7f790394f9e8>,\n",
              " <matplotlib.image.AxesImage at 0x7f79038ba2b0>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 55
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 720x72 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_0vysyFYYxPc"
      },
      "source": [
        "Next we have the transitions from `(node, observation, hidden_state)` to `(node, observation, hidden_state)`, which make up the majority of the transitions in any given trajectory:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 832
        },
        "id": "5_kjZuOaYxPc",
        "outputId": "3aa48b85-d97e-4ca2-a0be-670db4e8a47e"
      },
      "source": [
        "visualization.ndarrays.ndshow(\n",
        "    transition_matrix.in_tagged_to_in_tagged[0],\n",
        "    \"ccrr\", figsize=(15, 14),\n",
        "    colskips=lambda _: 0, rowskips=lambda _: 0)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<matplotlib.axes._subplots.AxesSubplot at 0x7f790382aa20>,\n",
              " <matplotlib.image.AxesImage at 0x7f7903845e48>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 56
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 1080x1008 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5fv3PPy1YxPc"
      },
      "source": [
        "Finally, we have transitions from intermediate states to halting states:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 128
        },
        "id": "QWmMAKRYYxPc",
        "outputId": "d1b85dc3-70b1-4cef-cba9-5b97bf1ae47a"
      },
      "source": [
        "visualization.ndarrays.ndshow(\n",
        "    transition_matrix.in_tagged_to_special[0],\n",
        "    \"ccr\", figsize=(20, 1),\n",
        "    colskips=lambda _: 0, rowskips=lambda _: 0)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<matplotlib.axes._subplots.AxesSubplot at 0x7f79037ceba8>,\n",
              " <matplotlib.image.AxesImage at 0x7f7903775eb8>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 57
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 1440x72 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qGVjqUXqfDkF"
      },
      "source": [
        "*(Try adding a for or while loop to the test function and seeing how the transition matrix changes!)*"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RBRakB0-YxPc"
      },
      "source": [
        "We can solve for the absorbing distribution for this transition matrix using `all_nodes_absorbing_solve`, which does the heavy lifting of constructing and solving a batch of linear systems, and also sets up the implicit differentiation machinery so that gradients can be computed efficiently."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sI8ycGFgYxPc",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "fe8fee2f-d635-4368-f620-52df8ba995c7"
      },
      "source": [
        "num_nodes = mdp_metadata.num_nodes\n",
        "absorbing_distribution = automaton_builder.all_nodes_absorbing_solve(\n",
        "    builder=builder,\n",
        "    transition_matrix=transition_matrix,\n",
        "    variant_weights=jax.nn.one_hot(jnp.zeros([num_nodes, num_nodes]), 2 if USE_VARIANTS else 1),  # should sum to 1 across last axis if using multiple variants\n",
        "    start_machine_states=jax.nn.one_hot(jnp.zeros([num_nodes]), 2),  # should sum to 1 across last axis if using multiple states\n",
        "    steps=100,  # How long to run the solver for; determines the maximum trajectory length\n",
        ")\n",
        "\n",
        "pprint(summarize_tree(absorbing_distribution))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "'float32(13, 13) 0.0059 \u00b10.076 [7.3e-16, 1.0]'\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 408
        },
        "id": "6Sti6sOzYxPc",
        "outputId": "26e9c41e-a76e-42a7-ceca-38292dbc82c2"
      },
      "source": [
        "visualization.ndarrays.ndshow(absorbing_distribution, figsize=(8, 6))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<matplotlib.axes._subplots.AxesSubplot at 0x7f790380fa58>,\n",
              " <matplotlib.image.AxesImage at 0x7f79036d97b8>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 59
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 576x432 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7DPZnyglYxPc"
      },
      "source": [
        "This matrix of absorbing probabilities is then optionally postprocessed with adjustment parameters, and then returned as the output of the GFSA layer. In this case, the layer adds one edge with high confidence.\n",
        "\n",
        "This is a weighted adjacency matrix, so there are also weak connections between other nodes. We can visualize this by changing the colormap:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 412
        },
        "id": "7dDEeC9NzGv7",
        "outputId": "ae487d4b-4d2d-44de-a362-0a984e085ff7"
      },
      "source": [
        "visualization.ndarrays.ndshow(absorbing_distribution, figsize=(8, 6), vmax=0.002)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<matplotlib.axes._subplots.AxesSubplot at 0x7f790365d908>,\n",
              " <matplotlib.image.AxesImage at 0x7f79037ce7f0>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 60
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 576x432 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Avk9ZZezzOwO"
      },
      "source": [
        "As the model trains, the loss function pushes these extra edge weights closer toward zero."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WLOYe4HE3CWo"
      },
      "source": [
        "## Next steps"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EFtUyQz-3EO6"
      },
      "source": [
        "Thanks for following along through this interactive demo! If you'd like to try applying the GFSA layer for a different task, or want a more in-depth discussion of how to specify the schema for new MDPs, see the notebook [\"Using the GFSA layer with new tasks\"][new-tasks-colab].\n",
        "\n",
        "[new-tasks-colab]: https://colab.research.google.com/github/google-research/google-research/blob/master/gfsa/notebooks/guide_for_new_tasks.ipynb"
      ]
    }
  ]
}
